typeof
使用 typeof 检测数据类型,首先返回的都是一个字符串,其次字符串中包含了对应的数据类型;
缺点:
-
typeof null === "object"
- 不能具体细分是数组、正则还是对象中其他值,使用 typeof 检测数据类型对于对象数据类型中的值返回结果都是"object"
总结:主要用来检测基本类型值(除null)和函数类型值;
instanceof
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上
object instanceof constructor
object
为实例对象,constructor
为构造函数
构造函数通过new
可以实例对象,instanceof
能判断这个对象是否是之前那个构造函数生成的对象
- instanceof 检测某一个实例是否属于某个类;
- 不能用来处理字面量方式创建出来的基本数据类型值,对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建出来的结果是有区别的。严格意义上来说只有实例创建出来的结果才是标准的对象数据类型值,字面量方式创建出来的基本数据类型值,是不严谨的实例,
instanceof 特性,只要在当前实例的原型上,检测出来的结果都是 true
Object.prototype.toString.call()
toString() 方法返回一个表示该对象的字符串。
对象中的 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 “[object type]”,