【问题标题】:Operator not working !=操作员不工作!=
【发布时间】:2016-01-04 17:43:09
【问题描述】:

我的代码有这个

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

每当我选择说“A1”时,它的行为就好像那是选择不等于它。据我了解是错误的,还是我遗漏了什么?

【问题讨论】:

  • 您认为将“A2”转换为布尔值会是什么?
  • 这不是 JavaScript 的工作方式。您必须明确地与每个可能的值进行比较。
  • 我不知道这是什么意思
  • if (choice != 'A1' && choice != 'A2' && choice != 'A3' ... )
  • 是的,你错过了一些东西。 ;) 您应该阅读有关如何执行布尔表达式的 JavaScript 文档。他们不是那样工作的。而且,是的,它是 Pointy 显示的更多代码,但它是正确的代码。如果不正确,较短的代码就不好了。

标签: javascript if-statement operators operand


【解决方案1】:

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

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

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

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

【讨论】:

  • choice 不是字符串,而是变量 :)
  • @PDKnight choice 不是字符串?你怎么知道的?
  • .indexOf("choice") 更改为.indexOf(choice)
【解决方案2】:

在 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 来完成它,这通常是最优雅的方式。

【讨论】:

    【解决方案3】:

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

    你的代码计算

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

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

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

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

    【讨论】:

    • 差不多。它正在评估choice != 'A1',然后是其余的。不过你的结论是正确的。
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多