typeof
底层原理
直接在计算机底层基于数据类型的值(二进制)进行检测
tyepof(null) => "object"
对象存储在计算机中,都是以000开始的二进制存储,null也是,所以检测出来的结果是对象
typeof 普通对象/数组对象/正则对象/日期对象 "object"
弊端
只能检测基本对象,不能检测复杂对象。
instanceof
检测当前实例是否属于这个类的
底层机制
只要当前类出现在实例的原型链上,结果都是true
弊端
由于我们可以肆意的修改原型的指向,所以检测出来的结果是不准的
不能检测基本数据类型
会顺着原型链查找
constructor
用法和instanceof 差不多
与instanceof的区别
可以检测基本数据类型
不会顺着原型链查找
弊端
由于我们可以随意更改constructor,所以也不准
Object.prototype.toString.call( )
标准检测数据类型的办法:Object.prototype.toString不是转换为字符串,是返回当前实例所属类的信息
支持检测全部类型
"[object Number/String/Boolean/Null/Undefined/Symbol/Object/Array/RegExp/Date/Function]"
弊端
使用方法复杂,频繁使用时过于繁琐