有人可以向我解释为什么这两个警报都为“真”吗?我认为逻辑“或”是有道理的-第一次测试后“或”短路:100!= 90,因此是真的。为什么在第一次测试后AND短路而不能继续进行?
if (100 != 90 && 100 && 190 && 200 && 290){
alert("true");
} else {
alert("false");
}
if (100 != 90 || 100 || 190 || 200 || 290){
alert("true");
} else {
alert("false");
}
编辑:谢谢大家的帮助!根据您的建议,我想将代码修改为:
var trains = [90,100,190,200,290];
var testValue = 100;
if (trains.indexOf(testValue) >= 0){
alert("true");
}
最佳答案
这将评估为true:
if (100 != 90 && 100 && 190 && 200 && 290)
因为每个部分都是真实的。 javascript中的任何非零值都被视为等同于true。所以你有了:
if (true && true && true && true && true)
显然,这是对的。这不是短路,因为所有值都不为假。
我怀疑您犯的错误是认为:
if (100 != 90 && 100)
正在做与此相同的事情:
if (100 != 90 && 100 != 100)
这根本不是语法的工作原理。很容易用“如果100不等于90并且不等于100”一词来表达,并理解这是什么意思,但是在javascript(以及大多数其他语言)中,您必须明确。
现在显然,如果您需要将一个值与一长串值进行比较,那么这将变得非常乏味,例如:
if (x != 90 && x != 100 && x != 190...)
在这种情况下,通常更容易将所有值放入数组中,而是询问该数组中是否包含
x
:var values = [90,100,190,...]
if (!values.some(function(e) { return e === x; })) {
// the value x is not in the array values
}
关于javascript - JS逻辑和/或,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37470888/