Приоритет выполнения операторов в JavaScript

Осветим вопрос приоритета выполнения основных операторов в JavaScript.

Все операторы делятся на группы, у которых различный приоритет. Те, у которых приоритет выше, выполняются первыми.


1 — Самым высоким приоритетом обладают операторы группировки. В данном случае это скобки «(» и «)»

i = (a + b) * c

( В данном случае группировка имеет более высокий приоритет чем умножение,
поэтому сначала выполнятся все операции внутри скобок )


2 — За ними следуют операторы постфиксного (указанного ПОСЛЕ переменной) инкремента и декремента

a-- // Постфиксный декремент
b++ // Постфиксный инкремент


3 — Следующими по приоритету идут префиксные инкремент и декремент а также логическое отрицание

--x  // Префиксный декремент
++y  // Префиксный инкремент
!z  // Логическое отрицание


4 — За ними идет возведение в степень

x = y ** z  // Возведение в степень


5 — Следующая группа: умножение, деление и остаток от деления

x = y * z  // Умножение
x = y / z  // Деление
x = y % z  // Остаток от деления


6 — Еще меньшим приоритетом обладают операции сложения и вычитания

x = y + z // Сложение
x = y - z // Вычитание


7 — Следом идут операции сравнения
>  // Больше
>=  // Больше или равно
<  // Меньше
<=  // Меньше или равно


8 — Затем операции равенства

==  // Равно
!=  // Не равно
===  // Строго равно
!==  // Строго не равно


9 — Логические операции

// Побитовое И
// Побитовое ИЛИ
&&  // Логическое И
||  // Логическое ИЛИ


10 — И наконец последними выполняются операции присваивания

=  // Присваивание
+=  // Присваивание со сложением
-=  // Присваивание с вычитанием
**=  // Присваивание с возведением в степень
*=  // Присваивание с умножением
/=  // Присваивание с делением
%=  // Присваивание с остатком от деления


Например при a = 3b = 6 и x = 2 выражение:

(x += (++a + b / a * b - ++b % x ** x)) === 11 + true;

даст нам true