2016-01-04 566 views
-1

我的代碼有這個操作不工作!=

if (choice != 'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'){//dosomethingrecursive} 

每當我選擇說,「A1」,它的作用就好像是選擇不是=它。據我瞭解是錯誤的,或者我錯過了什麼?

+0

你認爲'A2'轉換爲布爾值會是什麼? – TZHX

+3

這不是JavaScript中的工作方式。您必須明確地對每個可能的值進行比較。 – Pointy

+0

我不知道這是什麼意思 – Bartholomew

回答

0

你不能將英語句子翻譯成這樣的代碼 - 代碼的含義更加精確,在這種情況下不同。

你的代碼計算

'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3' 

,然後將結果與choice。這不是你想要的。

您必須單獨進行比較,例如

if (choice != 'A1') && (choice != 'A2') && ... 
+1

差不多。它正在評估'選擇!='A1'',然後剩下的。你的結論是正確的。 – Krease

1

在JavaScript和我知道,布爾logic operators不要以這種方式結合所有的編程語言,他們遵循一個固定的bool OPERATOR bool架構。

這意味着您的一系列括號||首先被遞增轉換爲單個值,然後將該值與您的choice進行比較。

達到你想要的邏輯最簡單的方法是通過利用Array#every重複你的邏輯操作上的每個值,直到操作失敗:

['A1', 'A2', 'A3', 'A4'].every(function(x) { x != choice }) 

翻譯爲:'choice' must be different from every value in 'array'

一般而言,每次您需要重複某些操作時,請考慮如何使用數組及其iterator methods來實現,它通常是最優雅的方式。

1

你不能這樣寫。 如果你不想(正確)鏈測試

if (choice != 'A1' && choice != 'A2' && ... 

和想要的東西更短,你可以把你的價值觀在數組中,並測試choice不是數組的元素:

[ 'A1', 'A2', ... ].indexOf(choice) < 0 
+0

'choice'不是一個字符串,它是一個變量:) – PDKnight

+0

@PDKnight'choice'不是一個字符串?你怎麼知道的 ? – Ilya

+1

將'.indexOf(「choice」)'改爲'.indexOf(choice)'。 – PDKnight