操作员不工作!=

Operator not working !=

本文关键字:工作 操作员      更新时间:2023-09-26

我的代码有这个

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

每当我选择说"A1"时,就好像这是选择而不是选择。据我所知,哪一个是错误的,还是我错过了什么?

你不能那样写。如果你不想(正确地)连锁测试

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

如果想要更短的值,可以将值放入数组中,并测试choice是否不是数组的元素:

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

在JavaScript和我所知道的所有编程语言中,布尔逻辑运算符不会以这种方式组合,它们遵循固定的bool OPERATOR bool模式。

这意味着您的带括号的||系列首先被增量转换为一个值,然后将该值与您的choice进行比较。

实现所需逻辑的最简单方法是利用Array#every对每个值重复逻辑操作,直到操作失败:

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

翻译过来就是:'choice' must be different from every value in 'array'

一般来说,每当你需要重复某件事时,想想如何使用数组及其迭代器方法,这通常是最优雅的方法。

你不能把一个英语句子翻译成这样的代码——代码的含义更精确,在这种情况下是不同的。

您的代码计算

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

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

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

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