新的数字()与数字()

new Number()Number()之间有什么区别? 我得到new Number()创build一个Number对象, Number()只是一个函数,但是什么时候该调用哪个?为什么?

相关说明,Mozilla说:

 Do not use a Boolean object to convert a non-boolean value to a boolean value. Instead, use Boolean as a function to perform this task. x = Boolean(expression); // preferred x = new Boolean(expression); // don't use 

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

Boolean(expression)将简单地将expression式转换为布尔原始值 ,而new Boolean(expression)将围绕转换后的布尔值创build一个包装器对象

与此不同的是:

 // 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" 

注意:虽然在需要的时候wrapper对象会自动转换为primitive(反之亦然),但只有一种情况,我可以想到要在哪里使用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 
 new Number( x ) 

创build一个新的包装对象。 我不认为有这个理由是有道理的。

 Number( x ) 

将传递的参数转换为Number值。 你可以使用这个将一些variables转换为数字types。 然而,这完成了相同的工作:

 +x 

通常:

你不需要这些:

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

你可以使用这些来投射:

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

但是,对于铸造来说,有更简单的解决scheme:

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

总是值得咨询的规范 ; 从第15.7.1节:

Number被调用为一个函数而不是一个构造函数时,它执行一个types转换。

同样,使用Boolean函数(15.6.1):

当布尔被作为一个函数而不是一个构造函数调用时,它执行一个types转换。

…这意味着你参考第9.2节(“ToBoolean”):

抽象操作ToBoolean根据表11将其参数转换为Booleantypes的值:
Undefined = false
Null = false
Boolean =结果等于input参数(不转换)。
Number =如果参数为+0,-0或NaN,则结果为false; 否则结果是真的。
String =如果参数是空string(长度为零),则结果为false; 否则结果是真的。
Object = true

new Boolean(value)Boolean(value) new 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 } 

现场的例子 …而你几乎总是想布尔人testing他们的目的。