布尔构造函数返回奇数数据

时间:2014-02-02 00:52:01

标签: javascript

为什么在调用a=new Boolean()

后使用javascript
  • a==false返回true
  • Boolean(a)返回true
  • if (a) {}正在运行

它们不应该都一样吗?

3 个答案:

答案 0 :(得分:1)

new关键字返回一个Boolean对象,它与false不完全相同。

var a = new Boolean();

// a is a Boolean object
typeof a === 'object';

// using equality operator, a appears to be false
a == false;

// using identity, a is not actually false
a !== false;

// casting your Boolean object results in true,
// similar to casting any other object
Boolean(a) === true;
Boolean({}) === true;

查看description from MDN。您将看到将对象传递给Boolean,创建一个值为 true 的对象。

  

如果需要,作为第一个参数传递的值将转换为布尔值。如果省略value或者为0,-0,null,false,NaN,undefined或空字符串(“”),则对象的初始值为false。所有其他值包括任何对象或字符串“false”,创建一个初始值为true 的对象。

答案 1 :(得分:0)

  

作为第一个参数传递的值将转换为布尔值   价值,如有必要。如果值被省略或为0,-0,null,false,   NaN,undefined或空字符串(“”),该对象有一个初始值   虚假的价值。所有其他值,包括任何对象或字符串   “false”,创建一个初始值为true的对象。

     

不要将原始布尔值true和false混淆   布尔对象的true和false值。

Source, as well as the answer to your questions

答案 2 :(得分:0)

a = new Boolean()
  

新构造的Boolean对象的[[PrimitiveValue]]内部属性设置为ToBoolean(value)。 See here

这意味着a是Boolean对象,其原始值为falseToBoolean(undefined))。


a == false // true
  

如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。 See here

ToNumber(a)将为0,因为a的原始值为false0==false


Boolean(a) // true
  

当布尔值作为函数而不是构造函数调用时,它会执行类型转换。 See here

由于a是一个对象,Boolean(a)将是true。所有对象都转换为true


if (a) doStuff()

与上面相同,a是一个对象,因此在if语句中强制为true。