有四个原始的内置对象包装器(String,Number,Boolean和Symbol(ES6))

由于null是一个对象,为什么没有Null内置的对象包装器,或者如果它是面向原始值的,为什么也可能没有定义?

我想不出一个用例,但这没有道理吗?

最佳答案

首先,null不是对象。 (typeof如此标识它的原因是long-standing bug的结果。)

对于我来说,拥有一个空包装的想法听起来很荒谬,因为这实际上是使用一个对象来表示一个不存在的对象。此外,在比较和强制方面,它还打开了另一整个蠕虫罐。

new Null() == null会评估什么?好吧,它是一个对象,因此它不是null,应该返回false。但是,它表示null,因此应该返回true。还是new Null() == null为true而new Null() === null为false?那new Null() == undefined呢? gh,JavaScript强制系统非常复杂。

此外,JavaScript具有两个“ nothing”值(nullundefined)已经很糟糕了。添加第三个(new Null())是一个糟糕的主意。

那么,添加new Null()会增加所有这些复杂性,原因何在?一个空对象可能有什么用途?能够在本质上为null的东西上设置属性和调用方法?如果有人需要做类似的事情,那么您要么做错了,要么实际上想要做些更接近Java的Optional<T>类型的事情。

(并且不要让我开始使用undefined包装器。)

10-07 13:03
查看更多