if
语句中存在一个复杂的情况,但不知怎的,它无法解决我想要的问题。
if (
(statementA1) ||
(statementA2) &&
(statementB) &&
(statementC)
) {
doSomething
}
A1
和A2
两者不能同时为真(因为实际陈述的性质)。
此外,B
和C
都必须评估为true才能产生整体真实。
因此,只有true false true true
和false true true true
才能返回true
;任何其他排列都应该返回false
。
由于语句的内在复杂性(包括Math.abs()
,A1
和B
具有内部的组合子语句),这些语句都是括号内的。
答案 0 :(得分:4)
有关
a1 a2 b c result ----- ----- ----- ----- ------ true false true true true false true true true true true true true true true <- different from blow
你可以使用这个表达式
(a1 || a2) && b && c
a1
或a2
以及b
和c
。
if ((statementA1 || statementA2) && statementB && statementC) {
// doSomething
}
由于operator precedence(6)超过logical AND &&
(5)
||
,您需要括号
如果你有案例
a1 a2 b c result ----- ----- ----- ----- ------ true false true true true false true true true true true true true true false <- different from above
然后你可以使用这个表达式
(!a1 && a2 || a1 && !a2) && b && c
分别检查a1
和a2
。
if ((!statementA1 && statementA2 || statementA1 && !statementA2) && statementB && statementC) {
// doSomething
}
答案 1 :(得分:2)
请记住首字母缩略词“请原谅我亲爱的莎莉阿姨”或PEMDAS,它指的是括号,指数,乘法/除法和加法/减法。这是优先顺序,从更高(更严格)到更低(更宽松),在许多语言中,包括JavaScript。
变种是“请原谅我的姨妈”(PEMA)。
然后记住,在逻辑世界and
有点像乘法,or
有点像加法。这样你就可以记住并且(&&
)比或(||
)更紧密。
因此,如果你想and
两个条件,其中一个条件本身or
有两个条件,你必须将后者括起来:
a && (b || c)
没有parens,它将被解释为
(a && b) || c
当然,在您的特定情况下,您可以通过简单地编写
来避免担心优先级和括号a1 != a2 && b && c