Приоритет операторов
Приоритет операторов определяет порядок, в котором операторы выполняются. Операторы с более высоким приоритетом выполняются первыми.
Интерактивный пример
console.log(3 + 4 * 5); // 3 + 20
// Expected output: 23
console.log(4 * 3 ** 2); // 4 * 9
// Expected output: 36
let a;
let b;
console.log((a = b = 5));
// Expected output: 5
Ассоциативность
Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:
a OP b OP c
Левая ассоциативность (слева направо) означает, что оно обрабатывается как (a OP b) OP c
, в то время как правая ассоциативность (справа налево) означает, что они интерпретируются как a OP (b OP c)
. Операторы присваивания являются право-ассоциативными, так что вы можете написать:
a = b = 5;
с ожидаемым результатом, что a
и b
будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала b
становится равным 5, затем a
принимает значение b
.
Примеры
3 > 2 && 2 > 1;
// вернёт true
3 > 2 > 1;
// вернёт false, потому что 3 > 2 возвращает true, в свою очередь true > 1 вернёт false
// Добавление скобок значительно повышает читаемость выражения: (3 > 2) > 1
Таблица
Операторы упорядочены с самого высокого (18) до самого низкого (1) приоритета.
Обратите внимание, что spread-оператор (...
) намеренно не включен в таблицу, потому что он вообще не является оператором и правильно говорить spread-синтаксис
. Подробнее можно почитать в ответе на Stack Overflow (en).