获得徽章 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
最初的 JavaScript 版本没有异常处理机制,这就是为什么 JavaScript 经常自动进行类型转换,或者静默失败的原因。
JavaScript 借鉴了 Java 将值划分为原始类型(primitives)和对象(objects)的做法。null 就是表示“非对象”的值。C 语言(但不是 Java)的传统是将 null 转换为 0(C 语言使用指针而非引用,并允许对指针进行算术运算)。
但还存在一个问题:在 JavaScript 中,每个变量既可以存储原始类型值,也可以存储对象。而在 Java 中,变量的静态类型会限制其只能存储其中一种类型的值。因此,我们需要一个值来表示“既不是原始类型,也不是对象”的状态。这个值本可以是 null,但当时艾克希望引入一个不那么“像引用”(即不与对象强关联)且不会转换为 0 的值。现在你就明白为什么 undefined 和 null 会转换成不同的数值了。
> Number(undefined)
NaN
> Number(null)
0
展开
2
4
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
Win10资源管理器不显示 H265 视频的缩略图,解决方法:下载 K-lite Codec Standard 即可
www.codecguide.com。苹果 HEIF 照片不显示:下载
copytrans.studio
评论
1