--- 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 ---
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ść 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 OP2
mają 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
.
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 | … , … |