有四个原始的内置对象包装器(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”值(null
和undefined
)已经很糟糕了。添加第三个(new Null()
)是一个糟糕的主意。
那么,添加new Null()
会增加所有这些复杂性,原因何在?一个空对象可能有什么用途?能够在本质上为null的东西上设置属性和调用方法?如果有人需要做类似的事情,那么您要么做错了,要么实际上想要做些更接近Java的Optional<T>
类型的事情。
(并且不要让我开始使用undefined
包装器。)