typeof
用typeof检测数据可以检测出基本数据类型(除了typeof null为'object'),检测结果"number","string","undefined","boolean","symbol","bigInt","object","function"
instanceof
使用instanceof一般检测引用数据类型,这个对象的原型链上是否存在某个类的prototype 弊端:不能检测非对象类如数字1,而不是new Number(1),instanceof左边的值必须是对象
constructor
任何值的constructor都指向所属的类,可以用基本数据类型调用constructor 弊端:constructor的值容易改变
Object.prototype.toString.call(要检测的值)
借用Object原型中的toString方法改变函数中的this指向,如果this为number类型 Object.prototypr.toString(1) //"[object Number]" Object.prototype.toString(true) //"[object Boolean]" Object.prototype.toString("") //"[object String]" Object.prototype.toString([]) //"[object Array]" Object.prototype.toString({}) //"[object Object]"
总结
typeof一般用来检测基本数据类型但是null特殊,检测的结果为"object",引用类性型只能区分function和object,instanceof检测引用数据类型,不能检测基本数据类型,对象的原型链上是否有当前类的原型,使用constructor引用数据类型基本数据类型都可使用得到实例所属的类,但是constructor的值可以随意改动 Object.prototype.toString.call()这个方法可以得到数的所在的类