Precedência de Operadores
Resumo
A precedência de operadores determina a ordem em que os operadores são processados. Operadores com maior precedência são processados primeiro.
Um exemplo simples:
3 + 4 * 5 // returns 23
O operador de multiplicação ("*") tem maior precedência que o operador de adição ("+") e por isso será executado primeiro.
Associatividade
Associatividade determina a ordem em que operadores da mesma precedência são processados. Por exemplo, considere a expressão:
a OP b OP c
Associatividade à esquerda (esquerda para direita) significa que a expressão será processada como (a OP b) OP c, enquanto associatividade à direita (direita para esquerda) significa que será interpretada como a OP (b OP c). Operadores de atribuição são associativos à direita, então você pode escrever:
a = b = 5; 5 = b = a
com o resultado esperado que a e b tenham o valor 5. Isto é porque o operador de atribuição retorna o valor que ele atribuiu. Primeiro, b é definido com o valor 5. Então a é definido com o valor de b.
Tabela
A tabela seguinte está ordenada da mais alta (20) para a mais baixa (0) precedência.
| Precedência | Tipo do Operador | Associatividade | Operadores individuais |
|---|---|---|---|
| 20 | Agrupamento | n/a | ( ⦠) |
| 19 | Acesso a Membro | esquerda para direita | ⦠. ⦠|
| Acesso a Membro Computado | esquerda para direita | ⦠[ ⦠] |
|
| new (com lista de argumentos) | n/a | new ⦠( ⦠) |
|
| 18 | Chamada a Função | esquerda para direita |
⦠( ⦠)
|
| new (sem lista de argumentos) | direita para esquerda | new ⦠|
|
| 17 | Incremento Pós-fixado | n/a | ⦠++ |
| Decremento Pós-fixado | n/a | ⦠-- |
|
| 16 | NÃO lógico | direita para esquerda | ! ⦠|
| NÃO bit-a-bit | direita para esquerda | ~ ⦠|
|
| Positivo Unário | direita para esquerda | + ⦠|
|
| Negativo Unário | direita para esquerda | - ⦠|
|
| Incremento Pré-fixado | direita para esquerda | ++ ⦠|
|
| Decremento Pré-fixado | direita para esquerda | -- ⦠|
|
| typeof | direita para esquerda | typeof ⦠|
|
| void | direita para esquerda | void ⦠|
|
| delete | direita para esquerda | delete ⦠|
|
| 15 | direita para esquerda | ⦠** ⦠| |
| 14 | Multiplicação | esquerda para direita | ⦠* ⦠|
| Divisão | esquerda para direita | ⦠/ ⦠|
|
| Resto | esquerda para direita | ⦠% ⦠|
|
| 13 | Adição | esquerda para direita | ⦠+ ⦠|
| Subtração | esquerda para direita | ⦠- ⦠|
|
| 12 | Deslocamento de bits para esquerda | esquerda para direita | ⦠<< ⦠|
| Deslocamento de bits para direita | esquerda para direita | ⦠>> ⦠|
|
| Deslocamento de bits para direita, sem sinal | esquerda para direita | ⦠>>> ⦠|
|
| 11 | Menor Que | esquerda para direita | ⦠< ⦠|
| Menor ou Igual a | esquerda para direita | ⦠<= ⦠|
|
| Maior Que | esquerda para direita | ⦠> ⦠|
|
| Maior ou Igual a | esquerda para direita | ⦠>= ⦠|
|
| in | esquerda para direita | ⦠in ⦠|
|
| instanceof | esquerda para direita | ⦠instanceof ⦠|
|
| 10 | Igualdade | esquerda para direita | ⦠== ⦠|
| Desigualdade | esquerda para direita | ⦠!= ⦠|
|
| Igualdade Estrita | esquerda para direita | ⦠=== ⦠|
|
| Desigualdade Estrita | esquerda para direita | ⦠!== ⦠|
|
| 9 | E bit-a-bit | esquerda para direita | ⦠& ⦠|
| 8 | OU exclusivo bit-a-bit | esquerda para direita | ⦠^ ⦠|
| 7 | OU bit-a-bit | esquerda para direita | ⦠| ⦠|
| 6 | E lógico | esquerda para direita | ⦠&& ⦠|
| 5 | OU lógico | esquerda para direita | ⦠|| ⦠|
| 4 | Condicional | direita para esquerda | ⦠? ⦠: ⦠|
| 3 | Atribuição | direita para esquerda | ⦠= ⦠|
⦠+= ⦠|
|||
⦠-= ⦠|
|||
⦠*= ⦠|
|||
⦠/= ⦠|
|||
⦠%= ⦠|
|||
⦠<<= ⦠|
|||
⦠>>= ⦠|
|||
⦠>>>= ⦠|
|||
⦠&= ⦠|
|||
⦠^= ⦠|
|||
⦠|= ⦠|
|||
| 2 | yield | direita para esquerda | yield ⦠|
| yield* | yield* ⦠|
||
| 1 | Propagação | n/a | ... ⦠|
| 0 | VÃrgula / Sequência | esquerda para direita | ⦠, ⦠|