为了账号安全,请及时绑定邮箱和手机立即绑定

新Number()vs Number()

新Number()vs Number()

慕侠2389804 2019-10-19 14:16:24
new Number()和之间有什么区别Number()?我得到的是new Number()创建一个Number对象,Number()而仅仅是一个函数,但是我什么时候应该调用它,为什么呢?在相关说明中,Mozilla说:不要使用布尔对象将非布尔值转换为布尔值。而是使用Boolean作为执行此任务的函数。x = Boolean(expression);     // preferredx = new Boolean(expression); // don't use这是为什么?我以为结果是一样的?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

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


可以看出以下区别:


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


查看完整回答
反对 回复 2019-10-19
?
绝地无双

TA贡献1946条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-10-19
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

永远值得参考规格 ; 从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=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

}

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


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 449 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信