你好,我是周爱民。欢迎回来继续学习 JavaScript。
今天是关于面向对象的最后一讲,上次已经说过,今天这一讲要讨论的是原子对象。关于原子对象的讨论,我们应该从null值讲起。
null值是一个对象。
null 值
很多人说 JavaScript 中的null值是一个 BUG 设计,连 JavaScript 之父 Eich 都跳出来对 Undefined+Null 的双设计痛心疾首,说null值的特殊设计是一个“抽象漏洞(abstraction leak)”。这个东西什么意思呢?很难描述,基本上你可以理解为在概念设计层面(也就是抽象层)脑袋突然抽抽了,一不小心就写出这么个怪胎。
然而我却总是觉得不尽如此,因为如果你仔细思考过 JavaScript 的类型系统,你就会发现null值的出现是有一定的道理的(当然 Eich 当年脑子是不是这样犯的抽抽也未为可知)。怎么讲呢?
早期的 JavaScript 一共有 6 种类型,其中 number、string、boolean、object 和 function 都是有一个确切的“值”的,而第 6 种类型Undefined定义了它们的反面,也就是“非值”。一般讲 JavaScript 的书大抵上都会这么说: