有四个基本的内置对象包装器(String、Number、Boolean和Symbol(ES6))
既然null是一个对象,为什么没有null内置的对象包装器,或者如果它是面向基元值的,也可能是未定义的?
我想不出一个用例,但它没有意义吗?
首先,null是而不是对象。(typeof
将其识别为这样的原因是一个长期错误的结果。)
在我看来,拥有null包装器的概念听起来很荒谬,因为这本质上是使用一个对象来表示没有对象。此外,当涉及到比较和胁迫时,它会打开另一个漏洞。
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
包装器。)