Open bibi7 opened 5 years ago
这个东西其实从第一版js就有了,万恶的历史遗留问题
null本身实际上是基本类型,但是Javascript在存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息。
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"
看一下其他类型的存储方式:
针对比较特殊的null和undefined,又有如下的存储方式:
null
undefined
于是在这种情况下,所有机器码都为0的null同学,自然而然的前三位也是0,typeof在判断的时候自然就返回object
object
ECMAScript有提出了一个修复方案(通过opt-in) 但是很不幸被拒绝(脑子里突然浮现出露伴老师的名言:搭嘎ko投哇撸!)
具体可见:MDN,2ality
null本身实际上是基本类型,但是Javascript在存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息。
看一下其他类型的存储方式:
针对比较特殊的
null
和undefined
,又有如下的存储方式:于是在这种情况下,所有机器码都为0的null同学,自然而然的前三位也是0,typeof在判断的时候自然就返回
object
ECMAScript有提出了一个修复方案(通过opt-in) 但是很不幸被拒绝(脑子里突然浮现出露伴老师的名言:搭嘎ko投哇撸!)
具体可见:MDN,2ality