新的数字()与数字()
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他们的目的。