Sumario
La precedencia de operadores determina el orden en el cual los operadores son evaluados. Los operadores con mayor precedencia son evaluados primero.
Ejemplo:
3 + 4 * 5 // retorna 23
El operador de multiplicación ("*") tiene una precedencia mas alta que el operador de suma ("+") y por eso sera evaluado primero.
Asociatividad
La asociatividad determina el orden en el cual los operadores con el mismo nivel de precedencia son procesados. Por ejemplo:
a OP b OP c
La asociatividad de izquierda a derecha significa que esa expresión es procesada como (a OP b) OP c,
mientras que la asociatividad de derecha a izquierda significa que es procesada como a OP (b OP c).
Los operadores de asignación tienen asociatividad de derecha a izquierda, por lo que puedes escribir:
a = b = 5; 5 = b = a
para asignar 5 a las dos variables. Esto es porque el operador de asignación retorna el valor que asignó. Primero b
es inicializada a 5. Despues a
es inicializada al valor de b
.
Tabla
La siguiente tabla esta ordenada de la precedencia más alta (0) a la más baja (18).
Precedencia | Tipo de operador | Asociatividad | Operador |
---|---|---|---|
0 | grouping | n/a | ( …) |
1 | member | left-to-right | ….… |
…[…] |
|||
new | n/a | new … (…) |
|
2 | function call | left-to-right | …(…) |
new | right-to-left | new … |
|
3 | increment | n/a | …++ |
decrement | n/a | …-- |
|
4 | logical-not | right-to-left | ! … |
bitwise not | right-to-left | ~ … |
|
unary + | right-to-left | + … |
|
unary negation | right-to-left | - … |
|
typeof | right-to-left | typeof … |
|
void | right-to-left | void … |
|
delete | right-to-left | delete … |
|
5 | multiplication | left-to-right | * |
division | left-to-right | / |
|
modulus | left-to-right | % |
|
6 | addition | left-to-right | + |
subtraction | left-to-right | - |
|
7 | bitwise shift | left-to-right | << |
>> |
|||
>>> |
|||
8 | relational | left-to-right | < |
<= |
|||
> |
|||
>= |
|||
in | left-to-right | in |
|
instanceof | left-to-right | instanceof |
|
9 | equality | left-to-right | == |
!= |
|||
=== |
|||
!== |
|||
10 | bitwise-and | left-to-right | & |
11 | bitwise-xor | left-to-right | ^ |
12 | bitwise-or | left-to-right | | |
13 | logical-and | left-to-right | && |
14 | logical-or | left-to-right | || |
15 | conditional | right-to-left | … ? … : … |
16 | assignment | right-to-left | = |
+= |
|||
-= |
|||
*= |
|||
/= |
|||
%= |
|||
<<= |
|||
>>= |
|||
>>>= |
|||
&= |
|||
^= |
|||
|= |
|||
17 | yield | right-to-left | yield … |
18 | comma | left-to-right | , |