JavaScript中null的数据类型?typeof返回Object的底层机制
关于JavaScript中null的常见疑问解答
疑问1:JavaScript中null的数据类型是什么?
直接给你明确答案:null是JavaScript中独立的原始类型(Primitive Type),它和undefined、string、number、boolean、symbol、bigint同属于原始类型家族,专门用来表示一个“空的、不存在的对象引用”。
疑问2:为什么typeof检测null会返回"Object"?
这绝对是JavaScript历史上最有名的设计遗留问题之一,而且因为兼容性原因至今没被修复!
早期JavaScript运行在32位系统中,每个值在内存里用32位存储单元表示,其中最低3位是类型标记位,用来快速判断值的类型:
000:标记为对象类型001:整数010:浮点数100:字符串110:布尔值
而null被设计成了全0的32位值,它的最低三位自然也是000——刚好和对象的类型标记位完全重合。typeof运算符的底层逻辑就是读取这三位标记,看到000就直接返回"object",完全没做额外的null判断。
后来ECMAScript标准明确将null定义为原始类型,但因为太多旧代码依赖这个“bug”的行为,为了不破坏现有系统,这个typeof的特殊表现就被保留到了现在。如果想要准确判断null的类型,可以用Object.prototype.toString.call(null),它会返回正确的"[object Null]"。
内容的提问来源于stack exchange,提问作者Dat V.




