-
typeof
对原始类型除null外都能正确判断,对于对象除了函数会显示function
外其他都会显示object
,因此不能准确判断类型,使用typeof 111 === 'number'
js在存储数据的时候,会用低位数(前三位)去存储数据类型,其中:000:对象、010:浮点数、100:字符串、110:布尔、1:整数,但是对于null,undefine来说,null所有的机器码均为000与对象的前三位一致,所以就会出现误判的情况 -
instanceof 内部通过原型链来判断,判断对象可以,但原始类型不行,
instanceof
不认为原始类型值的变量是对象,原始类型都返回false
,使用{} instanceof Object
- instanceof 可以正确的判断对象的类型, 内部机制是通过判断对象的原型链中是不是能找到类型的prototype
function myInstanceof(left, right){ // 获取类型原型 let prototype = right.prototype // 获取对象原型 left = left.__proto__ // 一直循环判断对象的原型是否等于类型原型,直到对象原型为null while (true){ if (left === null || left === undefined) return false if (prototype === left) return true left = left.__proto__ } }
-
constructor 使用
f.constructor == F
、''.constructor === String
-
Object的toString 使用
Object.prototype.toString.call('') ; // [object String]
JS类型判断:typeof、instanceof、constructor、toString
最新推荐文章于 2024-06-20 20:20:21 发布