我的代码有这个操作不工作!=
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