我有一个'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'))
哪个语法正确,他们做了什么不同的事情?有没有办法缩短这个陈述?
由于
答案 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。