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 (en-US) (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 (en-US) n/a … ++
Decremento Pós-fixado (en-US) n/a … --
16 NÃO lógico (en-US) direita para esquerda ! …
NÃO bit-a-bit (en-US) direita para esquerda ~ …
Positivo Unário (en-US) direita para esquerda + …
Negativo Unário (en-US) direita para esquerda - …
Incremento Pré-fixado (en-US) direita para esquerda ++ …
Decremento Pré-fixado (en-US) direita para esquerda -- …
typeof direita para esquerda typeof …
void direita para esquerda void …
delete (en-US) direita para esquerda delete …
15

Exponenciação

direita para esquerda … ** …
14 Multiplicação (en-US) esquerda para direita … * …
Divisão (en-US) esquerda para direita … / …
Resto (en-US) esquerda para direita … % …
13 Adição (en-US) esquerda para direita … + …
Subtração (en-US) esquerda para direita … - …
12 Deslocamento de bits para esquerda (en-US) esquerda para direita … << …
Deslocamento de bits para direita (en-US) esquerda para direita … >> …
Deslocamento de bits para direita, sem sinal (en-US) esquerda para direita … >>> …
11 Menor Que (en-US) esquerda para direita … < …
Menor ou Igual a (en-US) esquerda para direita … <= …
Maior Que (en-US) esquerda para direita … > …
Maior ou Igual a (en-US) esquerda para direita … >= …
in esquerda para direita … in …
instanceof esquerda para direita … instanceof …
10 Igualdade (en-US) esquerda para direita … == …
Desigualdade (en-US) esquerda para direita … != …
Igualdade Estrita (en-US) esquerda para direita … === …
Desigualdade Estrita (en-US) esquerda para direita … !== …
9 E bit-a-bit (en-US) esquerda para direita … & …
8 OU exclusivo bit-a-bit (en-US) esquerda para direita … ^ …
7 OU bit-a-bit (en-US) esquerda para direita … | …
6 E lógico (en-US) esquerda para direita … && …
5 OU lógico (en-US) esquerda para direita … || …
4 Condicional direita para esquerda … ? … : …
3 Atribuição (en-US) direita para esquerda … = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield direita para esquerda yield …
yield* yield* …
1 Propagação (en-US) n/a ...
0 Vírgula / Sequência esquerda para direita … , …