Number、Boolean和String是与这些基本类型相对应的构造函数。
BigInt是对应于 BigInt 基元类型的函数,但它不是构造函数。
new BigInt(1n) // Uncaught TypeError: BigInt is not a constructorRun Code Online (Sandbox Code Playgroud)
为什么?
Symbol新基元类型 ( 、 )的函数BigInt不会获得构造签名,因为 TC39 认为它们不需要它们。关于该BigInt提案的问题,Jordan Harband(TC39 成员、规范前编辑)表示:
就像 一样,与产生原语的东西一起
Symbol使用是没有意义的。new由于BigInt(likeSymbol) 是原语,因此它只能作为函数调用。不幸的是,ES6 之前的原始构造函数必须保留它们的
new- 能力,以实现向后兼容。
以及来自这个(也是约旦):
...用户永远不应该
new与Number对象一起使用,因为人们普遍认为使用盒装基元是一种非常糟糕的做法。新的范例(没有双关语)如下
Symbol- 如果你想要一个对象,你必须显式地将原语传递到Object.new Primitive()是一把步枪,新的原语不应该延续这种遗留模式。
new String等的用例非常少且相差很远(如果甚至有任何不能通过其他方式更好地解决的话)。具有NumberandString的构造签名Boolean会令人困惑(您是仅使用文字创建字符串,还是使用new String?为什么它new String("x") === "x"是 false?等等)。看起来委员会决定避免与较新的原语发生这种混淆。(它们仍然有对象对应物,只是如何获取它们稍微不太明显,因此不太可能引起混乱。)
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |