为什么typeof null的结果是Object?

2022-12-23  本文已影响0人  六寸光阴丶
为什么typeof null的结果是Object?

null是一种基本数据类型,存储在栈区;而typeof null的结果却是Object,而Object是引用数据类型,存储在堆区。其次,根据代码console.log(null instanceof Object)输出结果为false,我们可以知道null并不是Object的实例,两者之间存在矛盾。

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

上一篇 下一篇

猜你喜欢

热点阅读