操作员不工作!=

时间:2016-01-04 17:43:09

标签: javascript if-statement operators operand

我的代码有这个

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

每当我选择说“' A1'”时,就好像选择不是=。据我所知是错的,还是我错过了什么?

3 个答案:

答案 0 :(得分: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 :(得分:1)

你不能这样写。 如果你不想(正确)链测试

for line in Selection():
    print(line)

并希望更短的内容,您可以将您的值放在数组中,并测试if (choice != 'A1' && choice != 'A2' && ... 不是数组的元素:

choice

答案 2 :(得分:0)

你不能将英文句子翻译成这样的代码 - 代码的含义更精确,在这种情况下不同。

您的代码计算

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

然后将结果与choice进行比较。这不是你想要的。

你必须单独进行比较,例如

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