为什么typeof null的结果是Object?
null
是一种基本数据类型,存储在栈区;而typeof null
的结果却是Object
,而Object
是引用数据类型,存储在堆区。其次,根据代码alert (person instance of Object)
输出结果为false
,我们可以知道null
并不是Object
的实例,两者之间存在矛盾。
简单来说,typeof null
的结果为Object
的原因是一个bug
。在 javascript
的最初版本中,使用的 32
位系统,js
为了性能优化,使用低位来存储变量的类型信息。
在判断数据类型时,是根据机器码低位标识来判断的,而null
的机器码标识为全0
,而对象的机器码低位标识为000
。所以typeof null
的结果被误判为Object。