我今天遇到过这样的事情。(我以为是这样 会警告再见)
x = new Boolean(false);
if (x) {
alert('hello');
}else{
alert('goodbye');
}
我认为这是这样的(警告再见):
x = false;
if (x) {
alert('hello');
}else{
alert('goodbye');
}
我不明白它是如何运作的。
答案 0 :(得分:3)
你应该查看javascript的“truthy - falsy”属性。这是一个article。在第一种情况下x
为真,因为它是一个非空和非未定义的对象,因此它是 truthy 。在第二个中,x
是boolean
类型的false
, falsy 。
文章要记住的一些事情:
以下值为 falsy :
其他一切都是 truthy !
答案 1 :(得分:3)
如果您使用typeof x
,您会发现x是一个对象。对象总是如此。
大多数价值观 转换为true,但以下情况除外,转换为false:
答案 2 :(得分:3)
这是Boolean function的一个实例,而不是布尔基元。
javascript中的 true
和false
是布尔基元。当您将它们与布尔运算符一起使用时,它们的行为与您期望的一样。例如,true || false
为true
,true && false
为false
。
另一方面,Boolean
是一个特殊的函数,可以将其他数据类型转换为布尔值(以及其他内容)。当您致电new Boolean(false)
时,您需要创建一个{em}包含布尔基元Boolean
的{{1}}对象。在这种情况下,这是至关重要的区别。
简而言之,
false
使用javascript的真值规则。它是一个非空的对象,所以它是真的"。 if(new Boolean())
是一个布尔基元,实际上是检查true / false。答案 3 :(得分:2)
new Boolean(false)
返回一个非空的对象。非空对象始终为true
。
reference