оператор if с оператором условия javascript

#javascript #if-statement #conditional-statements

Вопрос:

просто у меня есть 2 вопроса относительно условного оператора JS, допустимо ли выражение ниже 2?

1.

 if(isUser amp;amp; isUser === true || isGuest amp;amp; isGuest === true){
     //...
   }
 

Мне интересно, нужно ли мне добавлять (), чтобы сделать его похожим и по-прежнему функционировать так же:

 if((isUser amp;amp; isUser === true) || (isGuest amp;amp; isGuest === true)){
     //...
   }
 
 const items = list.orderList amp;amp; list.orderList.isUser === true || list.orderList.isGuest ? list.items : [];
 

Мне интересно, нужно ли мне добавить (), чтобы он выглядел и функционировал так же, как описанный выше условный оператор:

 const items = list.orderList amp;amp; (list.orderList.isUser === true || list.orderList.isGuest === true) ? list.items : [];
 

Комментарии:

1. Думайте о amp;amp; и || как * и . amp;amp; Оператор связывает более плотно, чем || .

2. Да, выражения в #1 эквивалентны, но на самом деле вы должны писать просто if (isUser || isGuest) (или if (isUser === true || isGuest === true) если переменные могут содержать не булевы значения, но вам следует избегать этого). Выражения в #2 не эквивалентны.

3. Сравните false amp;amp; false || true vs false amp;amp; (false || true) в консоли.

Ответ №1:

В соответствии с приоритетом оператора в документах MDN, логическое И имеет приоритет над логическим ИЛИ. Следовательно,

 expression1 || expression2 amp;amp; expression3
 

будет оценивать, чтобы

 expression1 || (expression2 amp;amp; expression3)
 

Следовательно,

 isUser amp;amp; isUser === true || isGuest amp;amp; isGuest === true
 

естественно, оценивает, чтобы

 (isUser amp;amp; isUser === true) || (isGuest amp;amp; isGuest === true)
 

во всяком случае, поэтому вам не нужны круглые скобки..

Но поскольку во втором примере вы хотите оценить ИЛИ затем И, вам нужны круглые скобки, чтобы он оценивал так, как вам нужно, как

 list.orderList amp;amp; list.orderList.isUser === true || list.orderList.isGuest
 

будет оценивать, чтобы

 (list.orderList amp;amp; list.orderList.isUser === true) || list.orderList.isGuest
 

Комментарии:

1. statement1 amp;amp; statement2 || statement3 это довольно однозначно, так как оно будет оцениваться одинаково, если приоритет оператора будет одинаковым, а оценка будет только слева направо. statement1 || statement2 amp;amp; statement3 = statement1 || (statement2 amp;amp; statement3) может быть лучшим примером.

2. (Кроме того, этого expressionX не должно быть statementX )