获得徽章 0
- JavaScript 创始人 Brendan Eich 的两条推文揭示了 JavaScript 同时拥有 undefined 和 null 的历史原因。
最初的 JavaScript 版本没有异常处理机制,这就是为什么 JavaScript 经常自动进行类型转换,或者静默失败的原因。
JavaScript 借鉴了 Java 将值划分为原始类型(primitives)和对象(objects)的做法。null 就是表示“非对象”的值。C 语言(但不是 Java)的传统是将 null 转换为 0(C 语言使用指针而非引用,并允许对指针进行算术运算)。
但还存在一个问题:在 JavaScript 中,每个变量既可以存储原始类型值,也可以存储对象。而在 Java 中,变量的静态类型会限制其只能存储其中一种类型的值。因此,我们需要一个值来表示“既不是原始类型,也不是对象”的状态。这个值本可以是 null,但当时艾克希望引入一个不那么“像引用”(即不与对象强关联)且不会转换为 0 的值。现在你就明白为什么 undefined 和 null 会转换成不同的数值了。
> Number(undefined)
NaN
> Number(null)
02ality.com
展开24
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
![[送心]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_56.5777828.png)