You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript中null的数据类型?typeof返回Object的底层机制

关于JavaScript中null的常见疑问解答

疑问1:JavaScript中null的数据类型是什么?

直接给你明确答案:null是JavaScript中独立的原始类型(Primitive Type),它和undefinedstringnumberbooleansymbolbigint同属于原始类型家族,专门用来表示一个“空的、不存在的对象引用”。

疑问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.

火山引擎 最新活动