【发布时间】:2021-11-11 15:10:30
【问题描述】:
注意:我不是在寻找意见。原始构造函数的单个、客观有用的示例将满足该问题。
有什么好的理由使用new Number(n)?为什么会有这个构造函数?
我可以想到几个避免它的原因,例如,
- 文字更节省内存,因为它们不构造任何新内容。
- 文字彼此相等(
5 === 5但new Number(5) !== new Number(5))。 -
typeof运算符表示它是一个数字/str/etc 而不是一个对象。 -
new Number(0)绝不是虚假的。 (!!new Number(false) == true)。 - 你可以用它来进行类型转换,但是还有更简洁的方法。 (
+false === 0)。
明确地说,我了解 Number 对象(或 String 或 Object 或 Array 对象)具有有用的方法和属性,我的问题专门针对 构造函数。
我也知道在使用这些原始类型的方法时会隐式调用构造函数(例如123.45.toFixed(n)),但这并不能解释为什么构造函数会暴露给浏览器,或者如何(或 if) 构造函数本身很有用。
我以数字为例,但我不明白为什么 Javascript 会公开其他可用文字的构造函数(字符串、对象、数组等)。
为什么存在这些,有什么好的理由使用它们吗?
【问题讨论】:
-
一方面,可能是运行时间:stackoverflow.com/questions/4859800/… 但我承认我想不出一个好的推理 wrt 数字
-
我们不能在这里真正回答有关语言设计原理的问题,但对于这样的事情,通常只是“为什么不公开它?”它只是超出了类型层次结构的一般设计,将这些视为特殊情况会更有效。'
-
@LiorPollak - 我认为这个问题更多是关于用户定义的构造函数而不是内置的原始构造函数:/
-
老实说,其中一些可能归结为我们不再使用的旧旧东西。 JS 中所有从一开始就仓促起来的旧东西就是为什么像 JavaScript: The Good Parts 这样的书很重要。例如,JS 还有一个
with声明,我从未 使用过,MDN 建议反对。 FWIW,我从事 JS 开发已有 10 年了,在那段时间里使用原始构造函数的次数可能不到 5 次。 -
"您可以将其用于类型转换" - 不,您不能为此使用构造函数。您可能希望将
Number作为函数调用(不带new)。
标签: javascript constructor literals