--- title: Приоритет операторов slug: Web/JavaScript/Reference/Operators/Operator_Precedence tags: - JavaScript - Операторы - подробности об операторах - приоритет операторов translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence ---
Приоритет операторов определяет порядок, в котором операторы выполняются. Операторы с более высоким приоритетом выполняются первыми.
Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:
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
Данная таблица упорядочена с самого высокого приоритета (20) до самого низкого (1).
| Приоритет | Тип оператора | Ассоциативность | Конкретные операторы |
|---|---|---|---|
| 20 | {{jsxref("Operators/Grouping", "Группировка")}} | не определено | ( … ) |
| 19 | {{jsxref("Operators/Property_Accessors", "Доступ к свойствам", "#Dot_notation")}} | слева направо | … . … |
| {{jsxref("Operators/Property_Accessors", "Доступ к свойствам с возможностью вычисления","#Bracket_notation")}} | слева направо | … [ … ] |
|
| {{jsxref("Operators/new","new")}} (со списком аргументов) | не определено | new … ( … ) |
|
| Вызов функции | слева направо | … ( … ) |
|
| 18 | {{jsxref("Operators/new","new")}} (без списка аргументов) | справа налево | new … |
| 17 | {{jsxref("Operators/Arithmetic_Operators","Постфиксный инкремент","#Increment")}} | не определено | … ++ |
| {{jsxref("Operators/Arithmetic_Operators","Постфиксный декремент","#Decrement")}} | … -- |
||
| 16 | Логическое отрицание | справа налево | ! … |
| Побитовое отрицание | ~ … |
||
| Унарный плюс | + … |
||
| Унарный минус | - … |
||
| Префиксный инкремент | ++ … |
||
| Префиксный декремент | -- … |
||
| typeof | typeof … |
||
| void | void … |
||
| delete | delete … |
||
| await | await … |
||
| 15 | Возведение в степень | справа налево | … ** … |
| 14 | Умножение | слева направо | … * … |
| Деление | … / … |
||
| Остаток | … % … |
||
| 13 | Сложение | слева направо | … + … |
| Вычитание | … - … |
||
| 12 | Побитовый сдвиг влево | слева направо | … << … |
| Побитовый сдвиг вправо | … >> … |
||
| Сдвиг вправо с заполнением нулей | … >>> … |
||
| 11 | Меньше | слева направо | … < … |
| Меньше или равно | … <= … |
||
| Больше | … > … |
||
| Больше или равно | … >= … |
||
| in | … in … |
||
| instanceof | … instanceof … |
||
| 10 | Равно | слева направо | … == … |
| Не равно | … != … |
||
| Строго равно | … === … |
||
| Строго не равно | … !== … |
||
| 9 | Побитовое «И» | слева направо | … & … |
| 8 | Побитовое исключающее «ИЛИ» | слева направо | … ^ … |
| 7 | Побитовое «ИЛИ» | слева направо | … | … |
| 6 | Логическое «И» | слева направо | … && … |
| 5 | Логическое «ИЛИ» | слева направо | … || … |
| 4 | Условный | справа налево | … ? … : … |
| 3 | Присваивание | справа налево | … = … |
… += … |
|||
… -= … |
|||
… **= … |
|||
… *= … |
|||
… /= … |
|||
… %= … |
|||
… <<= … |
|||
… >>= … |
|||
… >>>= … |
|||
… &= … |
|||
… ^= … |
|||
… |= … |
|||
| 2 | yield | справа налево | yield … |
| yield* | yield* … |
||
| 1 | Запятая / Последовательность | слева направо | … , … |