Каков правильный синтаксис для этих «ИЛИ» и «И» в этом выражении «ЕСЛИ»? - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть утверждение «если», и я просто хотел узнать, являются ли они оба действительными (и я верю, что они есть), и если да, в чем разница?

var type;
var type2;

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

ИЛИ

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

Какой синтаксис правильный, и они делают что-то по-другому?Есть ли способ сократить это утверждение?

Спасибо

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

Два утверждения разные.Да, они оба являются действительными утверждениями, синтаксически, но логически они различаются.Поскольку оператор && имеет более высокий приоритет, чем ||в javscript результирующая логика будет оцениваться следующим образом:

2 голосов
/ 07 ноября 2011
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');
}
0 голосов
/ 07 ноября 2011

Оба условных оператора действительны, но результат может отличаться.

Первый оператор оценит значение OR в первой скобке, а затем оценит значение OR во второй скобке, инаконец, оцените оператор AND.

Второе утверждение сначала оценивает AND, а затем - слева направо без определенного приоритета (как в первом).

У вас естьчтобы узнать, какой из них вы на самом деле используете, чтобы определить лучший код рефакторинга для него.

См. эту ссылку: Приоритет оператора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...