bibi7 / fe-daily-increase

一个记录开发日常和奇奇怪怪的点的repo
MIT License
5 stars 0 forks source link

typeof null为什么返回object? #16

Open bibi7 opened 5 years ago

bibi7 commented 5 years ago

这个东西其实从第一版js就有了,万恶的历史遗留问题

null本身实际上是基本类型,但是Javascript在存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息。

在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"

看一下其他类型的存储方式:

针对比较特殊的nullundefined,又有如下的存储方式:

于是在这种情况下,所有机器码都为0的null同学,自然而然的前三位也是0,typeof在判断的时候自然就返回object

ECMAScript有提出了一个修复方案(通过opt-in) 但是很不幸被拒绝(脑子里突然浮现出露伴老师的名言:搭嘎ko投哇撸!)

具体可见:MDN2ality