typeof 为什么判断null是对象类型?instanceof判断的原理是什么?
JS的数据类型有七种
原始类型:
- Boolean
- Number
- String
- undefined
- null
- Symbol
对象类型 Object
用typeof判断类型
会出现下面的问题
typeof null // Object
typeof判断其他的原始类型不会出现问题。
typeof 22 // 'number'
typeof 'lorry' // 'string'
typeof undefined // 'undefined'
typeof false // 'boolean'
typeof Symbol() // 'symbol'
出现这个结果的原因:
在JS的最初版本中使用的是32位系统,为了性能考虑使用低位存储变量的类型信息,000开头的是对象,null是全0,所以将null误判为Object了,虽然现在的内部类型判断代码已经改变了,但bug永久的遗留下来了
typeof判断对象
typeof判断对象,除了function都会显示object,所以typeof并不能准确地判断变量类型
instanceof
可以用instanceof判断对象的正确类型,它的内部机制是通过原型链来判断的。
ps:是在掘金小册 “前端面试之道” 看到的,刚好触及到盲区就记录下来了