一、typeof
typeof 是一个一元操作符不是函数,所以不需要传递参数,使用方法非常简单:typeof A
对于基本类型
对于引用类型
对于NULL类型
虽然typeof null为object,但这只是JavaScript 存在的一个悠久 Bug,不代表null就是引用数据类型,并且null本身也不是对象
对于函数类型
对于日期类型
对于正则类型
对于包装类型
使用new操作符,除Function外的所有构造函数的类型都是object。
二、instanceof
instance中文翻译为实例,instanceof就是判断该对象是谁的实例。与typeof不同,它返回布尔值。
instanceof是对象运算符。
instanceof的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。
所以:
因为sss nnn bbb是原始值,而不是通过包装函数生成的实例。
正则和函数也一样
如果是作用在自己定义的构造函数呢?
benz是实例不是构造函数所以:
再来个构造函数:
再来个奇葩的
instanceof检测null和undefined :
三、总结 区别
- typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
- typeof是一元运算符 instanceof是对象运算符
- typeof 更合适判断基本类型,对引用类型、构造函数的实例对象以及null无法判断出准确类型
instanceof 用于判断实例对象是否是某一构造函数的实例化对象,从而判处该对象所属的类型。 这种方式是通过原型链查找。