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