新Number()vs Number()

new Number()和之间有什么区别Number()?我得到的是new Number()创建一个Number对象,Number()而仅仅是一个函数,但是我什么时候应该调用它,为什么呢?


在相关说明中,Mozilla说:


不要使用布尔对象将非布尔值转换为布尔值。而是使用Boolean作为执行此任务的函数。


x = Boolean(expression);     // preferred

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

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


慕侠2389804
浏览 450回答 3
3回答

函数式编程

Boolean(expression)将简单地将表达式转换为boolean原始值,而new Boolean(expression)将围绕转换后的boolean值创建包装对象。可以看出以下区别:// Note I'm using strict-equalsnew Boolean("true") === true; // falseBoolean("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 workvar b = true;b.relatedMessage = "this should be true initially";alert(b.relatedMessage); // undefined

绝地无双

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

元芳怎么了

永远值得参考规格 ; 从15.7.1节开始:当Number作为函数而不是构造函数调用时,它将执行类型转换。同样,将其Boolean用作函数(15.6.1):当布尔被称为函数而不是构造函数时,它将执行类型转换。...这意味着您可以参考第9.2节(“ ToBoolean”):根据表11,抽象运算ToBoolean将其自变量转换为Boolean类型的值: Undefined= false Null=  false Boolean=结果等于输入自变量(不进行转换)。 Number=如果参数为+ 0,-0或NaN,则结果为false;否则结果为true。 String=如果参数为空String(长度为零),则结果为false;否则为false。否则结果为true。 Object=truenew 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}实时示例 ...而您几乎总是需要布尔值来测试它们。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript