Конспект JS-course

Приоритеты операторов

Источник: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

Основная информация

Приоритет операторов определяет порядок, в котором операторы выполняются. Операторы с более высоким приоритетом выполняются первыми.

Пример:

3 + 4 * 5 // возвращает 23

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

Ассоциативность

Ассоциативность определяет порядок, в котором операторы с одинаковым приоритетом обрабатываются. Например, рассмотрим выражение:

a OP b OP c

Левая ассоциативность (left-to-right) означает, что оно обрабатывается как (a OP b) OP c, в то время как правая ассоциативность (right-to-left) означает, что оно интерпретируется как a OP (b OP c). Операторы присваивания являются право-ассоциативными, так что Вы можете написать:

a = b = 5;

с ожидаемым результатом, что a и b будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала b становится равным 5, затем a принимает значение b.

Данная таблица упорядочена с самого высокого приоритета (1) до самого низкого (18).

Precedence Operator type Associativity Individual operators
1 member left-to-right . []
1 new right-to-left new
2 function call left-to-right ()
3 increment n/a ++
3 decrement n/a --
4 logical-not right-to-left !
4 bitwise not right-to-left ~
4 unary + right-to-left +
4 unary negation right-to-left -
4 typeof right-to-left typeof
4 void right-to-left void
4 delete right-to-left delete
5 multiplication left-to-right *
5 division left-to-right /
5 modulus left-to-right %
6 addition left-to-right +
6 subtraction left-to-right -
7 bitwise shift left-to-right << >> >>>
8 relational left-to-right < <= > >=
8 in left-to-right in
8 instanceof left-to-right instanceof
9 equality left-to-right == != === !==
10 bitwise-and left-to-right &
11 bitwise-xor left-to-right ^
12 bitwise-or left-to-right I
13 logical-and left-to-right &&
14 logical-or left-to-right II
15 conditional right-to-left ?:
16 yield right-to-left yield
17 assignment right-to-left = += -= *= /= %= <<= >>= >>>= &= ^= I=
18 comma left-to-right ,