2012-02-03 73 views
14

我想我在這裏缺少一些基本的東西。爲什麼第三個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

回答

28

對於OR(||)操作,如果任何一個條件爲真,則結果爲true。

我想你想要一個AND(& &)在這裏操作。

+1

謝謝。現在我覺得這個問題很愚蠢:(我很困惑, – tempid 2012-02-03 17:27:09

+14

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

1

因爲如果任何一個條件爲真,OR運算符將返回true,並且在您的代碼中有兩個條件爲真。

3

每三個條件獨立地評估[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。實際上,只評估前兩個條款,因爲這是確定表達式的真值所必需的。

1

當檢查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

16

要執行的代碼,其中的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