1. Object.prototype.toString.call 判断类型
1. 内部属性 [[class]]
原生类对象都有这个属性,只读,只能通过Object.prototype.toString.call访问
2. 为什么不能对象本身toString访问
对象都是继承javascript对象祖师爷Object, 子类都有改写,比如字符串都会访问
const str = 'string'; str.toString(); // string, 因此用祖师爷的原生态toString方法,但this需要指向当前对象,即可访问到当前对象的内部属性"[[class]]"
3. 缺点
- 自定义对象都会*'[object Object]'*
- tostring会进行
装箱操作,产生很多临时对象
针对装箱优化
function getType(o) {
const toString = Object.prototype.toString;
if (typeof o !== "object") {
return typeof o
} else {
return toString.call(o).slice(8,-1)
}
}
getType(null) //
问题 怎么判断自定义对象