简单来说:首版 JS 通过 value 的前三个比特位的数值得到数值类型,但在判断数值类型的函数实现中,一方面完全忘记了判断 value 的类型在何种情况下为 null,另一方面,判断类型为 object 的逻辑完美适用 value null。
我们能说什么呢?毕竟首版 JS 是在很短的时间内实现出来的。
更新:这铁定是一个 bug 吗?
要知道 JS 是有两个空值的。也许 null 是有意为之的呢?
往这个角度想,就比较好理解在第一版实现之后才出现的规范中的这段话了:
In fact, the ECMAScript specification defines null as the primitive value that represents the intentional absence of any object value (ECMA-262, 11.4.11).
history of "typeof null"
有经验的 JS 程序员都知道
typeof null
的结果是 object。一个非常荒谬,但又不得不接受的事实。这个事实源于什么原因呢?很简单:这个首版 JS 实现的 bug。服不服?闪耀全球的 bug。
至于这个 bug 产生的原因呢,也是蛮有意思,可以参见文首的博文。
简单来说:首版 JS 通过 value 的前三个比特位的数值得到数值类型,但在判断数值类型的函数实现中,一方面完全忘记了判断 value 的类型在何种情况下为 null,另一方面,判断类型为 object 的逻辑完美适用 value null。
我们能说什么呢?毕竟首版 JS 是在很短的时间内实现出来的。
更新:这铁定是一个 bug 吗?
要知道 JS 是有两个空值的。也许 null 是有意为之的呢?
往这个角度想,就比较好理解在第一版实现之后才出现的规范中的这段话了:
null
是一个基本数据类型不假,但它代表着任何对象值的有意缺失。