为什么在调用a=new Boolean()
a==false
返回true Boolean(a)
返回true if (a) {}
正在运行它们不应该都一样吗?
答案 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值。
答案 2 :(得分:0)
a = new Boolean()
新构造的Boolean对象的[[PrimitiveValue]]内部属性设置为ToBoolean(value)。 See here
这意味着a是Boolean
对象,其原始值为false
(ToBoolean(undefined)
)。
a == false // true
如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。 See here
ToNumber(a)
将为0
,因为a
的原始值为false
。 0==false
Boolean(a) // true
当布尔值作为函数而不是构造函数调用时,它会执行类型转换。 See here
由于a
是一个对象,Boolean(a)
将是true
。所有对象都转换为true
。
if (a) doStuff()
与上面相同,a是一个对象,因此在if语句中强制为true。