为什么typeof null的结果是Object?

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容