新号码()对号码()

new Number()Number()有什么不同?我知道 new Number()创建了一个 Number对象,而 Number()只是一个函数,但是什么时候应该调用 which,为什么?

在一个相关的问题上,Mozilla 表示:

不要使用布尔对象将非布尔值转换为布尔值。相反,使用 Boolean 作为函数来执行此任务。

x = Boolean(expression);     // preferred
x = new Boolean(expression); // don't use

为什么? 我以为结果是一样的?

31675 次浏览
new Number( x )

创建一个新的包装器对象。我认为没有正当的理由使用这个。

Number( x )

将传递的参数转换为 Number 值。您可以使用它将某个变量强制转换为 Number 类型。然而,这种方法完成了同样的工作:

+x

一般来说:

你不需要这些:

new Number()
new String()
new Boolean()

你可以用它们来选角:

Number( value )
String( value )
Boolean( value )

然而,有一些更简单的解决方案:

+x // cast to Number
'' + x // cast to String
!!x // cast to Boolean

Boolean(expression)将简单地将表达式转换为 布尔原语值,而 new Boolean(expression)将围绕转换后的布尔值创建 包装对象

从中可以看出区别:

// Note I'm using strict-equals
new Boolean("true") === true; // false
Boolean("true") === true; // true

还有这个(谢谢@Hobbs) :

typeof new Boolean("true"); // "object"
typeof Boolean("true"); // "boolean"

注意: 虽然包装器对象在必要时会自动转换为原语(反之亦然) ,但我能想到的只有一种情况是您希望在哪里使用 new Boolean或其他原语包装器——如果您希望将属性附加到单个值的话。例如:

var b = new Boolean(true);
b.relatedMessage = "this should be true initially";
alert(b.relatedMessage); // will work


var b = true;
b.relatedMessage = "this should be true initially";
alert(b.relatedMessage); // undefined

始终值得咨询 说明书; 摘自第15.7.1节:

Number作为函数而不是构造函数调用时,它执行类型转换。

类似地,使用 Boolean作为函数(15.6.1) :

当 Boolean 作为函数而不是构造函数调用时,它执行类型转换。

... 也就是说,你可以参考9.2节(“ ToBoolean”) :

抽象操作 ToBoolean 将其参数转换为 Boolean 类型的值,如表11所示:
Undefined = false
Null = false
结果等于输入参数(没有转换)。
如果参数为 + 0、-0或 NaN,则结果为 false; 否则结果为 true。
如果参数是空 String (其长度为零) ,则结果为 false; 否则结果为 true。
Object = true

new Boolean(value)Boolean(value)之间的区别基本上在于前者返回一个对象,而后者根据上述返回一个基元。这个 事宜,因为对象是真实的:

var b = new Boolean(false);


display(b);            // Displays "false"
if (b) {
display("true");     // This is the path that gets taken, displaying "true"
}
else {
display("false");    // This path does NOT get taken
}

实例 ... 而您几乎总是需要布尔值来测试它们。

案件与 instanceof

const a = new Number('123'); // a === 123 is false
const b = Number('123'); // b === 123 is true
a instanceof Number; // is true
b instanceof Number; // is false
// Type conversion to primitive value
const a = Number('42')
a === 42  // true
a.answer = 'You asked the wrong question'
a.answer // undefined


// Object
const b = new Number('42')
b === 42 // false
b.answer = 'Life, the Universe, and Everything'
b.valueOf() === 42 // true
b.answer // 'Life, the Universe, and Everything'