xxleyi / learning_list

聚集自己的学习笔记
10 stars 3 forks source link

typeof null in JS #238

Open xxleyi opened 3 years ago

xxleyi commented 3 years ago

history of "typeof null"

有经验的 JS 程序员都知道 typeof null 的结果是 object。一个非常荒谬,但又不得不接受的事实。

这个事实源于什么原因呢?很简单:这个首版 JS 实现的 bug。服不服?闪耀全球的 bug。

至于这个 bug 产生的原因呢,也是蛮有意思,可以参见文首的博文。

简单来说:首版 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).

null 是一个基本数据类型不假,但它代表着任何对象值的有意缺失。