Пріоритет операторів
Пріоритет операторів визначає, яким чином розбиратимуться оператори по відношенню один до одного. Оператори з вищим пріоритетом стають операндами операторів з нижчим пріоритетом.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Асоціативність
Асоціативність визначає те, яким чином розбираються оператори з однаковим пріоритетом. Наприклад, розглянемо вираз:
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 | Кома / Послідовність | зліва направо | … , … |