复杂的IF语句问题
if
语句中有一个复杂的条件,不知怎么的,我不知道该怎么做。
if ( (statementA1) || (statementA2) && (statementB) && (statementC) ) { doSomething }
A1
和A2
不能同时为真(因为实际陈述的性质)。 而且, B
和C
都必须评估真实性,才能得出一个完整的结论。 所以只有为了true false true true
false true true true
应该回true
; 任何其他排列都应该返回false
。
由于它们内在的复杂性(包括Math.abs()
, A1
和B
具有内部的,组合的子状态),这些语句被放置在大括号中。
对于
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
a1
或a2
和b
和c
。
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
分别检查a1
和a2
。
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