js判断类型的方法

195 阅读2分钟

no.jpg

typeof

对于基本数据类型来说,除了null返回的是object,其他都可返回正确的类型。 调用null为空,是因为

  • null被认为是一个空对象,因此返回了object
  • 因为任何对象都会被转化为二进制,null转为二进制则表示全为0,如果前三个均为0,js就会把它当作是对象,这是js早期遗留下来的bug

所以typeof:

  • 适用于判断(除null)基础类型,
  • 判断引用类型,除了function 全返回object类型

instanceof

  • 只能用来判断变量的原型链上是否有构造函数的prototype属性(两个对象是否属于原型链的关系),不一定能获取对象的具体类型
  • Instanceof 不适用判断原始类型的值,只能用于判断对象是否从属关系

toString

  • Object.prototype.toString方法返回对象的类型字符串,因此可用来判断一个值的类型。

  • 因为实例对象有可能会自定义toString方法,会覆盖Object.prototype.toString,所以在使用时,最好加上call

  • 所有的数据类型都可以使用此方法进行检测,且非常精准

constructor

  • 原理:每一个实例对象都可通过constructor来访问它的构造函数,其实也是根据原型链的原理来的。
  • 由于undefined和null是无效的对象,因此是没有constructor属性的,这两个值不能用这种方法判断.

总结

  • typeof 适合基本类型和function类型的检测,无法判断null与object

  • instanceof 适合自定义对象,也可以用来检测原生对象,在不同的iframe 和 window间检测时失效,还需要注意Object.create(null)对象的问题

  • constructor 基本能判断所有类型,除了null和undefined,但是constructor容易被修改,也不能跨iframe使用

  • tostring能判断所有类型,可将其封装为全能的DataType()判断所有数据类型