为什么JavaScript中null === null为true但typeof null返回object?
关于JavaScript中null的相等性与typeof结果的疑问解答
typeof null返回object是历史遗留bug
这是JavaScript最初实现时的设计失误:早期JS用32位二进制存储值的类型信息,其中前三位为0的会被判定为object类型。而null的二进制表示是全0,自然就被误识别成了object。这个bug因为涉及大量现有代码的兼容性,一直没有被修复,但从语言规范上来说,null并不是对象。null是原始类型,不是引用类型的对象
JavaScript的原始类型包括null、undefined、string、number、boolean、symbol、bigint,null是其中独立的一种,不属于引用类型的对象范畴。你提到的“两个对象因地址不同无法相等”的情况,只适用于引用类型的对象实例,和null无关。null的相等性逻辑
- 对于严格相等
===:原始类型的比较是直接对比值,null是唯一的原始值,所以null === null必然返回true。 - 对于抽象相等
==:根据JS的相等规则,当两边都是null时,不需要进行类型转换,直接判定为相等,所以null == null也返回true。
- 对于严格相等
内容的提问来源于stack exchange,提问作者Tarun555
相关产品推荐
相关产品推荐

