#javascript

#javascript

Вопрос:

Итак, я работал над своим проектом, когда столкнулся с такой проблемой:

 var one = 1;
var two = 2;
var three = 7;
if (one === 1 || two === 2 amp;amp; three === 3) {
    console.log("ok"); // prints out ok
}
 

Я довольно смущен этим, так как я не думаю, что он должен печатать «ok». Я думал, что, поскольку условие после оператора amp;amp; было ложным, оно не должно выполняться, но я, очевидно, ошибаюсь. Кто-нибудь может пояснить, почему это работает?

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

1. Приоритет оператора amp;amp; превышен || , а не только слева направо.

Ответ №1:

В Javascript операторы не просто вычисляются слева направо, некоторые операторы имеют больший приоритет, чем другие. Операторы с более высоким приоритетом (в данном случае amp;amp; оператор с приоритетом 13) будут оцениваться раньше других ( || с приоритетом 14).


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

 if ((one === 1 || two === 2) amp;amp; three === 3) {
    console.log("ok"); // prints out ok
}
 

JSFiddle

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

1. Хорошо, это имеет смысл. Спасибо.