一、typeof [value]
用途:检测数据类型的运算符;
细节点:
- 特点:typeof检测出的结果都是小写字符串形式,包含对应的数据类型,所以
typeof typeof []
结果就是typeof "object"
==》"string"
; - 特点:NaN/Infinity都是数字类型,检测结果正常是
"number"
; - 弊端:
typeof null
的结果是"object"
(这是浏览器的bug,因为所有值在计算中都是二进制编码存储,浏览器默认把前三位是000的当做对象,null的二进制编码前三位是000,所以被误当做对象判断;Object.prototype.__proto__==null;
Object(最高层)类的原型对象的原型就是指向null); - 弊端:
typeof 普通对象/数组对象/正则对象...
结果都是"object"
,所以 typeof 方法不能更细地分辨属于哪种对象。
if( x != null && typeof x == 'object' ){//当x是任意对象时进行操作}
typeof(function(){}) //= "function"
二、[ example ] instanceof [ class ]
用途:检测某一个实例是否属于这个类;
弊端:
三、[ example ].constructor === [ class ]
用途:检测实例和类的关系,从而检测数据类型,实例的原型_proto_与类的原型对象指向一样,类的原型对象上有constructor属性指向类本身;
弊端:
四、Object.prototype.toString.call( [value] )
用途:借助Object类的原型对象属性检测类型;
弊端: