为什么这个if语句不能按预期工作?

时间:2015-01-23 13:56:57

标签: javascript

我今天遇到过这样的事情。(我以为是这样 会警告再见)

x = new Boolean(false);

if (x) {
  alert('hello');
}else{
    alert('goodbye');
}

我认为这是这样的(警告再见):

x = false;

if (x) {
  alert('hello');
}else{
    alert('goodbye');
} 

我不明白它是如何运作的。

4 个答案:

答案 0 :(得分:3)

你应该查看javascript的“truthy - falsy”属性。这是一个article。在第一种情况下x为真,因为它是一个非空和非未定义的对象,因此它是 truthy 。在第二个中,xboolean类型的false falsy

文章要记住的一些事情:

  

以下值为 falsy

  • 0(零)
  • “”(空字符串)
  • 未定义
  • NaN(一个特殊的数字值,意思是非数字!)
  

其他一切都是 truthy

答案 1 :(得分:3)

如果您使用typeof x,您会发现x是一个对象。对象总是如此。

大多数价值观 转换为true,但以下情况除外,转换为false:

  • 空字符串“”
  • 未定义
  • 数字0
  • 数字NaN
  • 布尔值false

答案 2 :(得分:3)

这是Boolean function的一个实例,而不是布尔基元。

javascript中的

truefalse布尔基元。当您将它们与布尔运算符一起使用时,它们的行为与您期望的一样。例如,true || falsetruetrue && falsefalse

另一方面,Boolean是一个特殊的函数,可以将其他数据类型转换为布尔值(以及其他内容)。当您致电new Boolean(false)时,您需要创建一个{em}包含布尔基元Boolean的{​​{1}}对象。在这种情况下,这是至关重要的区别。

简而言之,

  • false使用javascript的真值规则。它是一个非空的对象,所以它是真的"。
  • if(new Boolean())是一个布尔基元,实际上是检查true / false。

答案 3 :(得分:2)

new Boolean(false)返回一个非空的对象。非空对象始终为true

reference