为什么if(somestring)是真的Javascript?

时间:2017-01-16 07:30:40

标签: javascript jquery

为什么输出此代码为18.我无法理解为什么首先条件为真。如果有人可以向我解释,那将会很有帮助。

var x = 5;
var y = 1;

if(!!"false"){
    x = x + 10; 
    y = 3;
};
if(!!false) {
    x = x + 10; 
    y = y + 8;
};
alert(x+y)

由于

3 个答案:

答案 0 :(得分:3)

这是因为转换为"false"字符串 boolean的计算结果为true。即使存储文字 false,它与false值的无关系也是如此。 因此,它评估为true,其被否定两次,我们得到true作为结果。

JavaScript中只有少数“falsy”值 - 评估为false的值。您可以阅读有关for example here的内容。

  • false
  • 0(零)
  • ""
  • null
  • undefined
  • NaN

链接网站显示的示例与您的非常相似:

var a = !!(0); // variable is set to false
var b = !!("0"); // true

结果的唯一原因是 0 虚假,但“0” 不是

答案 1 :(得分:1)

第一个if语句将始终执行!!"false"为true,因为非空字符串在Javascript中为truthy value!!(truthy value)将始终为true。第二个if语句总是会失败,因为false是一个布尔值(falsy value),因此!!(falsy value)的输出为false。

由于第一个if语句正在执行,x的值将增加到15y将为3,最后结果为1815 + 3)。

答案 2 :(得分:1)

!!"false"是布尔true,因此它会进入第一个if条件。

在条件中,x的新值15y的新值将为3,总计最多为18。

在第二个if中,条件!!false设置为false,因此它不会进入循环 最后,您在警告中看到的值为18