复杂的IF声明问题

时间:2017-01-13 14:00:23

标签: javascript node.js if-statement conditional

if语句中存在一个复杂的情况,但不知怎的,它无法解决我想要的问题。

if (
    (statementA1) ||
    (statementA2) &&
    (statementB) &&
    (statementC)
) {
    doSomething
}

A1A2两者不能同时为真(因为实际陈述的性质)。 此外,BC都必须评估为true才能产生整体真实。 因此,只有true false true truefalse true true true才能返回true;任何其他排列都应该返回false

由于语句的内在复杂性(包括Math.abs()A1B具有内部的组合子语句),这些语句都是括号内的。

2 个答案:

答案 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

a1a2以及bc

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

由于operator precedence(6)超过logical AND &&(5)

logical OR ||,您需要括号

如果你有案例

  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

分别检查a1a2

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