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判断对象的正确类型,它的内部机制是通过原型链来判断的。

typeof 为什么判断null是对象类型?instanceof判断的原理是什么?
ps:是在掘金小册 “前端面试之道” 看到的,刚好触及到盲区就记录下来了