javascript中布尔答案之间的差异

时间:2016-01-09 08:56:15

标签: javascript

为什么这两个代码有不同的答案:

代码1答案是假的 代码2答案是真的

代码1

var x = Boolean (false);
if (x) 
{
      console.log (true);
}
else 
{
      console.log (false);
}
// answer is false

码2

var x = new Boolean (false);
if (x)
{
     console.log (true);
}
else 
{
     console.log (false);
}

//answer is true 

2 个答案:

答案 0 :(得分:1)

  

任何其值未定义或为null的对象,包括布尔值   值为false的对象,传递给a时计算结果为true   条件陈述。

来自https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Boolean

全局函数Boolean()可以在没有new的情况下调用类型转换,例如

How to add array of string into a specific attribute of a record?

使用new调用时,将另外创建一个包装器对象,这意味着您可以为该对象分配任意属性:

var foo = Boolean(param); // equivalent to `var foo = !!param`

答案 1 :(得分:1)

第一个区块省略了" new"关键字,x被赋值为Boolean(expr),这是一个将非布尔值转换为布尔值的函数。

第二个块创建一个Boolean对象,if条件返回true,因为x未定义。