js 类型判断

90 阅读1分钟

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) //

问题 怎么判断自定义对象