2

我想知道如何在 Javascript 中将 and (&&) 与 or (||) 结合起来。

我想检查 a 和 b 是否都等于 1,或者 c 和 d 是否都等于 1。

我试过这个:

    if (a == 1 && b == 1 || c == 1 && d == 1)
    {
        //Do something
    }

但它不起作用。

有人知道吗?

4

4 回答 4

8

&& 之前 ||==在他们两个之前。

从您的最小示例中我看不到,为什么它没有达到您想要的效果。a-d 有哪些值类型?JavaScript 可能会发生一些不明显的类型强制。也许尝试明确地比较===或转换为数字。

旁注:许多类似 C 语言的 lint 工具建议在混合逻辑运算符时加入括号以提高可读性。

于 2013-06-10T11:50:28.067 回答
3

运算符优先级可以通过将表达式放在括号之间来覆盖。

 if ((+a == 1 && +b == 1) || (+c == 1 && +d == 1)) // Use brackets to group them
 {
   // your code
 }

这将防止您遇到类似的情况if(0&&0 || 1&&1)

于 2013-06-10T11:27:01.007 回答
2

好吧,既然我已经告诉其他所有人(除了大卫)他们的答案是错误的,让我给他们同样的机会来骚扰我。

如图所示,您现有的代码应该已经完成​​了您描述的工作。但是当你说:

“我想检查 a 和 b 是否都等于 1,或者 c 和 d 是否都等于 1。”

...您使用“任何一个”一词意味着您要检查以下条件中的一个且只有一个是否为真:

  • a 和 b 都是 1,但 c 和 d 不都是 1
  • c 和 d 都是 1,但 a 和 b 不都是 1

也就是说,您希望一对变量为 1,但您不希望所有四个变量同时为 1?

如果是这样,那就是异或运算,在 JS 中是^运算符

if ((a == 1 && b == 1) ^ (c == 1 && d == 1)) {

请注意,与逻辑 OR运算符不同,您必须在表达式的 AND部分||周围添加括号,因为它具有更高的优先级。(实际上是一个按位运算符,但它在这里对你有用,因为你将使用它的操作数都是布尔值。)&&^^

于 2013-06-10T13:11:22.673 回答
1

放置一些额外的括号来区分和 n 或条件

if ((a == 1 && b == 1) || (c == 1 && d == 1))
于 2013-06-10T11:31:42.680 回答