复杂的IF语句问题

if语句中有一个复杂的条件,不知怎么的,我不知道该怎么做。

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

A1A2不能同时为真(因为实际陈述的性质)。 而且, BC都必须评估真实性,才能得出一个完整的结论。 所以只有为了true false true true false true true true应该回true ; 任何其他排列都应该返回false

由于它们内在的复杂性(包括Math.abs()A1B具有内部的,组合的子状态),这些语句被放置在大括号中。

对于

  a1 a2 bc result ----- ----- ----- ----- ------ true false true true true false true true true true true true true true true <- different from blow 

你可以使用这个expression式

 (a1 || a2) && b && c 

a1a2bc

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

您需要括号,因为逻辑AND && (6)的运算符优先级高于逻辑OR || (5)

如果你有这种情况

  a1 a2 bc result ----- ----- ----- ----- ------ true false true true true false true true true true true true true true false <- different from above 

那么你可以使用这个expression式

 (!a1 && a2 || a1 && !a2) && b && c 

分别检查a1a2

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

请记住首字母缩写词“请原谅我的亲爱的阿姨Sally”,也就是PEMDAS,它是指括号,求幂,乘法/除法和加法/减法。 这是在包括JavaScript在内的许多语言中,从较高(较紧)到较低(较宽松)的优先顺序。

一个变种是“请原谅我的阿姨”(PEMA)。

那么请记住,在逻辑世界中and有点像乘法, or有点像加法。 这样,你可以记住( && )绑定比( || )更紧密。

因此,如果你想and两个条件在一起,其中一个本身就是两个条件,你必须把后者括号:

 a && (b || c) 

没有这些东西,就会被解释为

 (a && b) || c 

当然,在你的具体情况下,你可以通过简单的写作来避免担心优先级和括号

 a1 != a2 && b && c 
    Interesting Posts