--- 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 | … , … |