为什么typeof null
的结果是Object
?
null
是一种基本数据类型,存储在栈区;而typeof null
的结果却是Object
,而Object
是引用数据类型,存储在堆区。其次,根据代码console.log(null instanceof Object)
输出结果为false
,我们可以知道null
并不是Object
的实例,两者之间存在矛盾。
简单来说,typeof null
的结果为Object
的原因是一个bug
。在 javascript
的最初版本中,使用的 32
位系统,js
为了性能优化,使用低位来存储变量的类型信息。
数据类型 | 机器码标识 |
---|---|
对象(Object) | 000 |
整数 | 1 |
浮点数 | 010 |
字符串 | 100 |
布尔 | 110 |
undefined |
-2^31(即全为1) |
null |
全为0 |
在判断数据类型时,是根据机器码低位标识来判断的,而null
的机器码标识为全0
,而对象的机器码低位标识为000
。所以typeof null
的结果被误判为Object
。