我的代碼有這個操作不工作!=
if (choice != 'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'){//dosomethingrecursive}
每當我選擇說,「A1」,它的作用就好像是選擇不是=它。據我瞭解是錯誤的,或者我錯過了什麼?
我的代碼有這個操作不工作!=
if (choice != 'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'){//dosomethingrecursive}
每當我選擇說,「A1」,它的作用就好像是選擇不是=它。據我瞭解是錯誤的,或者我錯過了什麼?
你不能將英語句子翻譯成這樣的代碼 - 代碼的含義更加精確,在這種情況下不同。
你的代碼計算
'A1' || 'A2' || 'A3' || 'B1' || 'B2' || 'B3' || 'C1' || 'C2' || 'C3'
,然後將結果與choice
。這不是你想要的。
您必須單獨進行比較,例如
if (choice != 'A1') && (choice != 'A2') && ...
差不多。它正在評估'選擇!='A1'',然後剩下的。你的結論是正確的。 – Krease
在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來實現,它通常是最優雅的方式。
你認爲'A2'轉換爲布爾值會是什麼? – TZHX
這不是JavaScript中的工作方式。您必須明確地對每個可能的值進行比較。 – Pointy
我不知道這是什麼意思 – Bartholomew