--- title: Pierwszeństwo operatorów slug: Web/JavaScript/Reference/Operators/Operator_Precedence tags: - JavaScript - Operator - pierwszeństwo translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence original_slug: Web/JavaScript/Referencje/Operatory/Pierwszeństwo_operatorów ---
{{jsSidebar("Operators")}}
Pierwszeństwo operatorów ustala kolejność, w jakiej operatory są ewaluowane. Operatory z wyższym pierwszeństwem są ewaluowane jako pierwsze.

Prosty przykład:

3 + 4 * 5 // zwraca 23

Operator mnożenia ("*") ma wyższe pierwszeństwo niż operator dodawania ("+") i dlatego będzie ewaluowany jako pierwszy.

Łączność

Łączność określa kolejność, w jakiej przetwarzane są operatory o takim samym pierwszeństwie. Przykłądowo, rozważny wyrażenie:

a OP b OP c

Jeżeli  OP1 and OPmają różne poziomy pierwszeństwa operatorów (patrz tabela poniżej), operator z wyższym poziomem pierwszeństwa zostanie wykonany jako pierwszy, a kolejność zapisu nie ma znaczenia. Zwróćmy uwagę na w poniższym przykładzie, że mnożenie ma wyższy poziom pierwszeństwa i tym samym zostanie wykonane jako pierwsze, pomimo tego, że to dodawanie jest zapisane w kodzie jako pierwsze.

console.log(3 + 10 * 2);   // wynik 23
console.log(3 + (10 * 2)); // wynik 23 ponieważ nawiasy tutaj nie mają znaczenia
console.log((3 + 10) * 2); // wynik 26 ponieważ nawiasy zmieniają kolejność działań

Lewo-łączność (od lewej do prawej) oznacza, iż będzie ono przetworzone jako (a OP b) OP c, podczas gdy prawo-łączność (od prawej do lewej) oznacza, iż będzie ono zinterpretowane jako a OP (b OP c). Operatory przypisania są prawo-łączne, więc możesz napisać:

a = b = 5;

oczekując, że a i b otrzymają wartość 5. Wynika to z faktu, iż operator przypisania zwraca wartość, która jest przypisana. Najpierw wartość b ustawiana jest na 5, a następnie wartość zmiennej a jest ustawiana na wartość b.

Tabela

Poniższa tabela uporządkowana jest od najwyższego (19) do najniższego (0) pierwszeństwa.

Pierwszeństwo Rodzaj operatora Łączność Operator
19 Grouping n/a ( … )
18 Member Access left-to-right … . …
Computed Member Access left-to-right … [ … ]
new (z listą argumentów) n/a new … ( … )
17 Wywołanie funkcji left-to-right … ( … )
new (bez listy argumentów) right-to-left new …
16 Postinkrementacja n/a … ++
Postdekrementacja n/a … --
15 Negacja logiczna (NOT) right-to-left ! …
Negacja bitowa (NOT) right-to-left ~ …
Unary Plus right-to-left + …
Unary Negation right-to-left - …
Preinkrementacja right-to-left ++ …
Predekrementacja right-to-left -- …
typeof right-to-left typeof …
void right-to-left void …
delete right-to-left delete …
14 Mnożenie left-to-right … * …
Dzielenie left-to-right … / …
Reszta z dzielenia left-to-right … % …
13 Dodawanie left-to-right … + …
Odejmowanie left-to-right … - …
12 Bitowe przesunięcie w lewo left-to-right … << …
Bitowe przesunięcie w prawo left-to-right … >> …
Bitowe przesunięcie w prawo bez znaku left-to-right … >>> …
11 Mniejsze niż left-to-right … < …
Mniejsze lub równe left-to-right … <= …
Większe niż left-to-right … > …
Większe lub równe left-to-right … >= …
in left-to-right … in …
instanceof left-to-right … instanceof …
10 Równość left-to-right … == …
Nierówność left-to-right … != …
Ścisła równość left-to-right … === …
Ścisła nierówność left-to-right … !== …
9 Koniunkcja bitowa (AND) left-to-right … & …
8 Bitowa alternatywa wykluczająca (XOR) left-to-right … ^ …
7 Alternatywa bitowa (OR) left-to-right … | …
6 Koniunkcja logiczna (AND) left-to-right … && …
5 Alternatywa logiczna (OR) left-to-right … || …
4 Warunek right-to-left … ? … : …
3 Przypisanie right-to-left … = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield right-to-left yield …
1 Spread n/a ... …
0 Comma / Sequence left-to-right … , …