为什么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。