You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中typeof null返回Object的原因:是Bug还是历史遗留问题?

为什么在JavaScript中typeof null会返回"object"?

这个问题绝对是JavaScript里最有名的「历史遗留坑」之一,我刚学JS的时候也被它搞懵过——明明null就是用来表示「空值」的,怎么typeof就把它判定成对象了?

先给你个明确的结论:null不是对象,它是JavaScript官方定义的7种原始类型(primitive type)之一,其他六种分别是undefined、boolean、number、string、symbol、bigint。

那为什么typeof null会返回"object"呢?这得追溯到JavaScript的早期实现:

  • 在最初的JS引擎里,每个值都会用一个32位的存储单元来保存,其中低3位是用来标记值的类型标签:比如000代表对象,1代表整数,100代表字符串,等等。
  • 而null被设计成了全0的二进制值,这样低3位自然也是000,正好和对象的类型标签重合。于是typeof操作符检查类型标签的时候,就误把null当成了对象。

这个问题其实很早就被发现了,但为什么没修复?因为修复它会打破大量已经上线的代码——很多开发者已经写出了依赖typeof null === 'object'逻辑的程序,一旦修改这个行为,这些代码都会报错。所以ECMAScript标准干脆把这个「bug」固化成了规范的一部分,一直保留到现在。

那怎么准确判断一个值是不是null呢?别用typeof,直接用严格相等运算符===就好了:

var is_null = null;
console.log(typeof is_null); // 输出 "object"
console.log(is_null === null); // 输出 true

这样就能精准区分null和真正的对象啦。

内容的提问来源于stack exchange,提问作者rameezmeans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:50:29