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

Пріоритет операторів визначає, яким чином розбиратимуться оператори по відношенню один до одного. Оператори з вищим пріоритетом стають операндами операторів з нижчим пріоритетом.

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

Асоціативність визначає те, яким чином розбираються оператори з однаковим пріоритетом. Наприклад, розглянемо вираз:

a OP b OP c

Лівоасоціативність (зліва направо) означає, що вони оброблятимуться як (a OP b) OP c, в той час як правоасоціативність (справа наліво) означає, що він буде інтерпретований як a OP (b OP c). Оператори присвоєння є правоасоціативними, отже, ви можете написати:

a = b = 5;

очікуючи, що a та b отримають значення 5. Все тому, що оператор присвоєння повертає значення, яке було присвоєне. Спочатку b присвоюється 5. Потім a також присвоюється 5, значення, яке повертається від b = 5, або правого операнду присвоєння.

Приклади

3 > 2 && 2 > 1
// вертає true

3 > 2 > 1
// вертає false, тому що 3 > 2 дорівнює true, а true > 1 дорівнює false
// Додавання дужок робить все зрозумілішим: (3 > 2) > 1

Таблиця

Ця таблиця впорядкована від найвищого (21) до найнижчого (1) пріоритету.

Пріоритет Тип оператора Асоціативність Окремі оператори
21 Групування н/з ( … )
20 Доступ до властивостей зліва направо … . …
Доступ до обчислених властивостей зліва направо … [ … ]
new (зі списком аргументів) н/з new … ( … )
Виклик функції зліва направо … ( )
Необов'язкове ланцюгування зліва направо ?.
19 new (без списку аргументів) справа наліво new …
18 Постфіксний інкремент н/з … ++
Постфіксний декремент … --
17 Логічне НЕ справа наліво ! …
Побітове НЕ ~ …
Унарний плюс + …
Унарний мінус - …
Префіксний інкремент ++ …
Префіксний декремент -- …
typeof typeof …
void void …
delete delete …
await await …
16 Піднесення до степеня справа наліво … ** …
15 Множення зліва направо … * …
Ділення … / …
Остача … % …
14 Додавання зліва направо … + …
Віднімання … - …
13 Бітовий лівий зсув зліва направо … << …
Бітовий правий зсув … >> …
Бітовий беззнаковий правий зсув … >>> …
12 Менше ніж зліва направо … < …
Менше чи дорівнює … <= …
Більше ніж … > …
Більше чи порівнює … >= …
in … in …
instanceof … instanceof …
11 Рівність зліва направо … == …
Нерівність … != …
Строга рівність … === …
Строга нерівність … !== …
10 Побітове І зліва направо … & …
9 Виключне побітове АБО зліва направо … ^ …
8 Побітове АБО зліва направо … | …
7 Оператор null-об'єднання зліва направо … ?? …
6 Логічне І зліва направо … && …
5 Логічне АБО зліва направо … || …
4 Умовний оператор справа наліво … ? … : …
3 Присвоєння справа наліво … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield справа наліво yield …
yield* yield* …
1 Кома / Послідовність зліва направо … , …