Javascript 复杂的IF语句问题

Javascript 复杂的IF语句问题,javascript,node.js,if-statement,conditional,Javascript,Node.js,If Statement,Conditional,在if语句中有一个复杂的条件,不知怎的,它不能解决我想要的问题 if ( (statementA1) || (statementA2) && (statementB) && (statementC) ) { doSomething } A1和A2不能同时为真(因为实际语句的性质)。 此外,B和C都必须计算true,才能得出总体true。 因此,只有对于true-false-true和false-true-true才应返回t

if
语句中有一个复杂的条件,不知怎的,它不能解决我想要的问题

if (
    (statementA1) ||
    (statementA2) &&
    (statementB) &&
    (statementC)
) {
    doSomething
}
A1
A2
不能同时为真(因为实际语句的性质)。 此外,
B
C
都必须计算true,才能得出总体true。 因此,只有对于
true-false-true
false-true-true
才应返回
true
;任何其他排列都应返回
false

由于语句的内部复杂性,
Math.abs()
A1
B
都有内部的组合子语句,因此这些语句都用大括号括起来

a1
a2
b
c

if ((statementA1 || statementA2) && statementB && statementC) {
    // doSomething
}
由于(6)与(5)之间的of,因此需要使用括号

如果你有这个案子

分别检查
a1
a2

if ((!statementA1 && statementA2 || statementA1 && !statementA2) && statementB && statementC) {
    // doSomething
}
为了

a1
a2
b
c

if ((statementA1 || statementA2) && statementB && statementC) {
    // doSomething
}
由于(6)与(5)之间的of,因此需要使用括号

如果你有这个案子

分别检查
a1
a2

if ((!statementA1 && statementA2 || statementA1 && !statementA2) && statementB && statementC) {
    // doSomething
}
还记得首字母缩略词“请原谅我亲爱的萨莉阿姨”或PEMDAS吗?它指的是括号、幂、乘/除和加/减。在许多语言中,这是从高(紧)到低(松)的优先顺序,包括JavaScript

一个变体是“请原谅我的姑妈”(佩玛)

然后记住,在逻辑世界中,
有点像乘法,
有点像加法。这样,您就可以记住and(
&&
)比or(
|
)绑定得更紧

因此,如果要将
两个条件放在一起,其中一个条件本身就是
两个条件,则必须将后者括起来:

a && (b || c)
如果没有帕伦夫妇,这将被解释为

(a && b) || c
当然,在您的特定情况下,您可以通过简单地编写来避免担心优先级和括号

a1 != a2 && b && c
还记得首字母缩略词“请原谅我亲爱的萨莉阿姨”或PEMDAS吗?它指的是括号、幂、乘/除和加/减。在许多语言中,这是从高(紧)到低(松)的优先顺序,包括JavaScript

一个变体是“请原谅我的姑妈”(佩玛)

然后记住,在逻辑世界中,
有点像乘法,
有点像加法。这样,您就可以记住and(
&&
)比or(
|
)绑定得更紧

因此,如果要将
两个条件放在一起,其中一个条件本身就是
两个条件,则必须将后者括起来:

a && (b || c)
如果没有帕伦夫妇,这将被解释为

(a && b) || c
当然,在您的特定情况下,您可以通过简单地编写来避免担心优先级和括号

a1 != a2 && b && c

如果运算符优先级对您来说比较困难,则始终可以将一个If块拆分为多个嵌套块。但是,是的,逻辑性和比OR有更高的优先级。
a | | b&c
解析为
a | |(b&c)
。这并不太复杂,我只是太专注于这个问题(本周重写了3次相同的feauter),现在我没有时间来讨论它。它本身很恶心,里面没有任何东西。为什么不简单地阅读呢?顺便说一句,当你说,*两个
A1
A1
不能同时为真“,我想你的意思是,如果条件成立,就永远不会为真,也不一定为真,对吧?换句话说,你是说
true
永远不会发生,还是说它可能发生,如果是,应该返回false(或true)?如果运算符优先级对您来说很困难,您可以将一个If块拆分为多个嵌套。但是,是的,逻辑和优先级高于OR。
a | | b&c
解析为
a | |(b&c)
。这并不太复杂,我只是太关注这个问题(本周将同一个feauter重写了3次)现在我没有人和我讨论这个问题。它本身就很恶心,没有在里面嵌套任何东西。为什么不简单地读一下呢?顺便说一下,当你说,*两个
A1
A1
不能同时是真的“,我想你的意思是永远不会是,也不一定不会是这样,对吧?换句话说,你是说
true
永远不会发生,还是说它可能会发生,如果是这样,应该返回false(或true)?A1部分和A2完全引用同一个对象属性,其中包含一个字符串,该字符串是后面的逻辑。然而,我用尼娜的解决方案进行了测试,它给了我正确的结果。我希望在这里说谢谢不会有问题。A1部分和A2完全指的是同一个对象属性,其中包含一个字符串,这就是后面的逻辑。然而,我用尼娜的解决方案进行了测试,它给了我正确的结果。我希望在这里说谢谢不会有问题。