IF语句中的多个或多个条件

问题描述:

我想我在这里缺少一些基本的东西。为什么第三个IF条件是真的?该条件不应该评估为假?我想做一些事情,其中​​编号不是1,2或3.IF语句中的多个或多个条件

var id = 1; 
if(id == 1) //true  
if(id != 1) //false 
if(id != 1 || id != 2 || id != 3) //this returns true. why? 

谢谢。

+5

因为'id'不等于'2'或'3'? 'false ||真|| true == true' – 2012-02-03 17:11:40

+3

1!= 2 ..这显然是正确的.. lollzzz – 2012-02-03 17:12:48

+1

因为id> 3,imo。 – ddacot 2012-02-03 17:13:50

对于OR(||)操作,如果任何一个条件为真,则结果为true。

我想你想要一个AND(& &)在这里操作。

+1

谢谢。现在我觉得这个问题很愚蠢:(我很困惑, – tempid 2012-02-03 17:27:09

+14

哈,我们都到过了,相信我。 – Gabe 2012-02-03 17:28:43

因为如果任何一个条件为真,OR运算符将返回true,并且在您的代码中有两个条件为真。

每三个条件独立地评估[1]:

id != 1 // false 
id != 2 // true 
id != 3 // true 

然后,它计算false || true || true,这是真实的(a || b为真,如果任一ab为true)。我想你想

id != 1 && id != 2 && id != 3 

如果ID不为1,这不是2这是唯一真正的,它不是3

[1]:这并不完全正确,查找short-circuit evaluation。实际上,只评估前两个条款,因为这是确定表达式的真值所必需的。

当检查ID!= 2,则返回true,并停止进一步的检查

+1

这一点很重要,如果您在检查参数之前需要查看某个对象是否存在,它就派上用场了。 'if(obj!= null && obj.field == 2)' – 2012-02-03 17:18:25

+0

-1 - 一个有趣的方面,但不是根本问题。对于底部构建,使用 – user66001 2014-03-26 14:37:45

要执行的代码,其中的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])) 
+7

+1。 – user66001 2014-03-26 14:34:34

+0

索引的替代检查。如果值在数组中,则不是。不像在Python中检查值。 'array.indexOf(id)== -1'表示该id不在数组中。相反,使用'!='。 – Neil 2017-08-05 22:29:59

+0

@NeilDesh,在开头注意'',''。它们相当于 – 2017-08-05 22:32:36