我想我错过了一些基本的东西。为什么第三个IF条件是真的?条件不应该评估为假吗?我想做一些id不是1,2或3的事情。
var id = 1;
if(id == 1) //true
if(id != 1) //false
if(id != 1 || id != 2 || id != 3) //this returns true. why?
谢谢。
答案 0 :(得分:30)
使用OR
(||)操作,如果任何一个条件为真,则结果为真。
我认为你想在这里进行AND
(和&&)操作。
答案 1 :(得分:24)
您希望执行id不是(1或2或3)的代码,但OR运算符不会通过id分发。说出你想要的唯一方法就是说
id不是1,id不是2,id不是3。
转换为
if (id !== 1 && id !== 2 && id !== 3)
或者更多pythonesque:
if (!(id in [,1,2,3]))
答案 2 :(得分:3)
三个条件中的每一个都是独立评估的[1]:
id != 1 // false
id != 2 // true
id != 3 // true
然后评估false || true || true
,这是真的(如果a || b
或a
为真,则b
为真)。我想你想要
id != 1 && id != 2 && id != 3
只有当ID不是1并且它不是2且它不是3时才是真的。
[1]:这不是严格正确的,查找short-circuit evaluation。实际上,只评估前两个子句,因为这是确定表达式真值所必需的。
答案 3 :(得分:1)
因为如果任何一个条件为真,OR运算符将返回true,并且在代码中有两个条件为真。
答案 4 :(得分:1)
当它检查id!= 2时,它返回true并停止进一步检查
答案 5 :(得分:-1)
这是一个示例:
false && true || true // returns true
false && (true || true) // returns false
(true || true || true) // returns true
false || true // returns true
true || false // returns true