获得徽章 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)
0

2ality.com
展开
2
赞了这篇沸点
周五的快乐又到了🎉
评论
赞了这篇沸点
周末加班之后,周一燃尽了[流泪]
对抗路莫得感情于2025-05-12 11:26发布的图片
7
赞了这篇沸点
jym,我不能在摆烂了,100赞直接提离职
149
下一页