有四个原始的内置对象包装器(String、Number、Boolean 和 Symbol(ES6))
既然 null 是一个对象,为什么没有 Null 内置对象包装器,或者如果它是面向原始值的话,也可能没有定义?
我想不出用例,但它没有意义吗?
最佳答案
首先,null不是一个对象。 ( typeof
如此标识它的原因是 long-standing bug 的结果。)
拥有空包装器的概念对我来说听起来很荒谬,因为这本质上是使用一个对象来表示不存在的对象。此外,当涉及到比较和强制时,它会引发另一堆蠕虫。
什么会new Null() == null
评价为?嗯,它是一个对象,所以它不是 null 并且应该返回 false。然而,它代表 null,所以它应该返回true。或者是new Null() == null
正确同时new Null() === null
是假的吗?怎么样new Null() == undefined
?呃,JavaScript 强制系统已经够复杂的了。
此外,JavaScript 有两个“无”值( null
和 undefined
)就已经够糟糕的了。添加第三个 ( new Null()
) 是一个糟糕的主意。
因此,添加 new Null()
会增加所有这些复杂性,为什么呢? null 对象有什么可能用途?能够在本质上为空的东西上设置属性并调用方法吗?如果有人需要做类似的事情,那么您要么做错了,要么实际上想要更接近 Java 的 Optional<T>
类型。
(不要让我开始使用 undefined
包装器。)
关于javascript - 为什么没有 Null 内置对象包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802445/