为什么输出此代码为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)
由于
答案 0 :(得分:3)
这是因为转换为"false"
时字符串 boolean
的计算结果为true。即使存储文字 false
,它与false
值的无关系也是如此。
因此,它评估为true
,其被否定两次,我们得到true
作为结果。
JavaScript中只有少数“falsy”值 - 评估为false的值。您可以阅读有关for example here的内容。
false
""
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
的值将增加到15
,y
将为3
,最后结果为18
( 15 + 3
)。
答案 2 :(得分:1)
!!"false"
是布尔true
,因此它会进入第一个if
条件。
在条件中,x
的新值15
和y
的新值将为3,总计最多为18。
在第二个if
中,条件!!false
设置为false
,因此它不会进入循环
最后,您在警告中看到的值为18