在'IF'语句中,这个'OR'和'AND'的正确语法是什么?

时间:2011-11-07 10:47:50

标签: javascript syntax

我有一个'if'陈述,只是想知道这些是否有效(我相信它们是否有效),如果有,那有什么区别?

var type;
var type2;

if ((type == 'BOS'|| type == 'BPS'|| type == 'BRS') && (type2 == 'BOS'|| type2 == 'BPS'|| type2 == 'BRS))

OR

if ((type == 'BOS') || (type == 'BPS') || (type == 'BRS') && (type2 == 'BOS') || (type2 == 'BPS') || (type2 == 'BRS'))

哪个语法正确,他们做了什么不同的事情?有没有办法缩短这个陈述?

由于

3 个答案:

答案 0 :(得分:5)

这两个陈述是不同的。是的,它们在语法上都是有效的陈述,但从逻辑上讲它们是不同的。自从&&运算符的优先级高于||在javscript中, 结果逻辑将在语句2中进行如下评估:

1) (type == 'BRS') && (type2 == 'BOS')
2) (type == 'BOS') || (type == 'BPS') || (result of 1) || (type2 == 'BPS') || (type2 == 'BRS')

在声明1中:

1) (type == 'BOS'|| type == 'BPS'|| type == 'BRS')
2) (type2 == 'BOS'|| type2 == 'BPS'|| type2 == 'BRS')
3) (result of 1) && (result of 2)

答案 1 :(得分:2)

var type1;
var type2;

var correct_value = {
  BRS: 1,
  BOS: 1,
  BPS: 1
};

if( correct_value[type1] && correct_value[type2]) {
  alert('ok');
}
else {
  alert('not ok');
}

答案 2 :(得分:0)

两个条件语句都有效,但结果可能不同。

第一个语句将评估第一个括号中的OR值,然后评估第二个括号中的OR值,最后评估AND运算符。

第二个语句将首先评估AND,然后从左到右进行评估,没有特定的优先级(如第一个)。

您必须知道实际使用哪一个来确定最佳重构代码。

请参阅此链接:Operator Precedence