404 Not Found

404 Not Found


nginx

Operadores em JavaScript

Operadores são símbolos que dizem ao JavaScript qual operação realizar. Você usa + para adição todos os dias, mas os operadores do JS vão muito além da aritmética — atribuição, comparação e avaliação lógica dependem deles. Esta lição cobre os operadores mais usados de uma vez.

Operadores Aritméticos

Operador Significado Exemplo
+ Adição 5 + 38
- Subtração 5 - 32
* Multiplicação 5 * 315
/ Divisão 6 / 32
% Resto 7 % 31
** Exponenciação 2 ** 38
++ Incremento x++ ou ++x
-- Decremento x-- ou --x

O operador de resto % é especialmente útil — verificar par/ímpar,循环 em loops, e mais. ** é o operador de exponenciação adicionado no ES2016, equivalente a Math.pow() mas mais conciso.

A diferença entre prefixo e postfixo ++ / --: prefixo altera primeiro e depois retorna, postfixo retorna primeiro e depois altera. Não encadeie múltiplos ++ na mesma linha — o código vira um enigma ilegível.

Exemplo: Básico dos Operadores Aritméticos

HTML
<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <title>Operadores Aritméticos</title>
</head>
<body>
  <h3>Demonstração de Operadores Aritméticos</h3>
  <pre id="output"></pre>
  <script>
    var out = document.getElementById('output');
    var a = 17, b = 5;

    var lines = [];
    lines.push('a = ' + a + ', b = ' + b);
    lines.push('a + b  = ' + (a + b));
    lines.push('a - b  = ' + (a - b));
    lines.push('a * b  = ' + (a * b));
    lines.push('a / b  = ' + (a / b));
    lines.push('a % b  = ' + (a % b));
    lines.push('a  b = ' + (a  b));

    var x = 10;
    lines.push('');
    lines.push('x = 10');
    lines.push('x++  = ' + (x++) + '  (postfixo: retorna valor antigo, x vira ' + x + ')');
    lines.push('++x  = ' + (++x) + '  (prefixo: altera primeiro, x vira ' + x + ')');

    out.textContent = lines.join('\n');
  </script>
</body>
</html>
▶ Experimente

Operadores de Atribuição

= é atribuição, não "igual" no sentido matemático. Esta é uma das armadilhas mais comuns para iniciantes — if (x = 5) não lança um erro; atribui 5 a x e retorna 5 (truthy), então a condição é sempre verdadeira.

Atribuição composta é um atalho:

Atalho Equivalente
x += 5 x = x + 5
x -= 3 x = x - 3
x *= 2 x = x * 2
x /= 4 x = x / 4
x %= 3 x = x % 3

Exemplo: Operadores de Atribuição

HTML
<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <title>Operadores de Atribuição</title>
</head>
<body>
  <h3>Demonstração de Operadores de Atribuição</h3>
  <pre id="output"></pre>
  <script>
    var out = document.getElementById('output');
    var lines = [];

    var score = 80;
    lines.push('Nota inicial = ' + score);

    score += 10;
    lines.push('score += 10 → ' + score);

    score -= 25;
    lines.push('score -= 25 → ' + score);

    score *= 2;
    lines.push('score *= 2  → ' + score);

    score /= 3;
    lines.push('score /= 3  → ' + score.toFixed(1));

    score %= 30;
    lines.push('score %= 30 → ' + score.toFixed(1));

    out.textContent = lines.join('\n');
  </script>
</body>
</html>
▶ Experimente

Operadores de Comparação

Operador Significado
== Igualdade frouxa (realiza coerção de tipo)
=== Igualdade estrita (sem coerção de tipo)
!= Desigualdade frouxa
!== Desigualdade estrita
> Maior que
< Menor que
>= Maior ou igual
<= Menor ou igual

⚠️ A armadilha == vs ===: Esta é a armadilha mais clássica do JavaScript, sem exceção. == realiza coerção de tipo silenciosamente — "5" == 5 é true! Enquanto === exige que tipo e valor coincidam — "5" === 5 é false. Sempre use === a menos que você precise especificamente de coerção de tipo. Da mesma forma, use !== em vez de !=.

Exemplo: A Armadilha == vs ===

HTML
<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <title>== vs ===</title>
</head>
<body>
  <h3>Igualdade Frouxa vs Igualdade Estrita</h3>
  <pre id="output"></pre>
  <script>
    var out = document.getElementById('output');
    var lines = [];

    lines.push('"5" == 5   → ' + ("5" == 5));
    lines.push('"5" === 5  → ' + ("5" === 5));
    lines.push('');
    lines.push('0 == false   → ' + (0 == false));
    lines.push('0 === false  → ' + (0 === false));
    lines.push('');
    lines.push('"" == false  → ' + ("" == false));
    lines.push('"" === false → ' + ("" === false));
    lines.push('');
    lines.push('null == undefined  → ' + (null == undefined));
    lines.push('null === undefined → ' + (null === undefined));
    lines.push('');
    lines.push('5 != "5"   → ' + (5 != "5"));
    lines.push('5 !== "5"  → ' + (5 !== "5"));

    out.textContent = lines.join('\n');
  </script>
</body>
</html>
▶ Experimente

Viu? 0 == false e "" == false são ambos true — completamente contra-intuitivo. É como comparar maçãs e laranjas: == diz "ambos são frutas, suficientemente próximos"; === diz "não são iguais, ponto final." Fique com === e você evitará metade dos seus bugs.

Operadores Lógicos

Operador Significado Descrição
&& E Verdadeiro apenas quando ambos os lados são truthy
|| OU Verdadeiro quando qualquer lado é truthy
! NÃO Nega o valor

&& e || têm um recurso útil chamado avaliação de curto-circuito: && para no primeiro valor falsy, || para no primeiro valor truthy — o resto nunca é avaliado. Isso é comumente usado para atribuições condicionais concisas:

HTML
<script>
var nome = entradaUsuario || 'Anônimo';
</script>

Exemplo: Operadores Lógicos e Avaliação de Curto-Circuito

HTML
<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <title>Operadores Lógicos</title>
</head>
<body>
  <h3>Demonstração de Operadores Lógicos</h3>
  <pre id="output"></pre>
  <script>
    var out = document.getElementById('output');
    var lines = [];

    var age = 20;
    var hasTicket = true;

    lines.push('idade = ' + age + ', temIngresso = ' + hasTicket);
    lines.push('idade >= 18 && temIngresso → ' + (age >= 18 && hasTicket));
    lines.push('idade >= 18 || temIngresso → ' + (age >= 18 || hasTicket));
    lines.push('!temIngresso              → ' + (!hasTicket));
    lines.push('');

    lines.push('--- Avaliação de Curto-Circuito ---');
    lines.push('1 && "olá"  → ' + (1 && "olá"));
    lines.push('0 && "olá"  → ' + (0 && "olá"));
    lines.push('1 || "olá"  → ' + (1 || "olá"));
    lines.push('0 || "olá"  → ' + (0 || "olá"));
    lines.push('');

    var username = '';
    var displayName = username || 'Convidado';
    lines.push('String vazia || "Convidado" → ' + displayName);

    out.textContent = lines.join('\n');
  </script>
</body>
</html>
▶ Experimente

O Operador + com Strings

Quando + encontra uma string, ele vira um operador de concatenação: desde que um lado seja string, o outro lado é convertido para string e ambos são unidos.

HTML
<script>
"Olá" + " " + "Mundo"   // "Olá Mundo"
"Número: " + 42            // "Número: 42"
3 + 4 + "px"              // "7px" (3+4=7 primeiro, depois concatenado)
"px" + 3 + 4              // "px34" (esquerda para direita: "px"+3="px3", depois +4)
</script>

Aquele "px" + 3 + 4 dando "px34" em vez de "px7" é uma armadilha clássica de entrevista — + avalia da esquerda para a direita, e uma vez que o lado esquerdo é string, tudo depois vira concatenação.

Visão Geral do Operador Ternário

O operador ternário é um atalho para if...else, com a sintaxe: condição ? valor1 : valor2.

HTML
<script>
var status = idade >= 18 ? 'Adulto' : 'Menor';
</script>

Se a condição for truthy, retorna valor1; caso contrário, valor2. Condições simples funcionam elegantemente com o operador ternário, mas não os aninhe — a ? b ? c : d : e é uma receita para confusão. O uso detalhado é coberto na Lição 10.

Precedência de Operadores

JavaScript determina a ordem de avaliação com base na precedência, seguindo as mesmas regras que você aprendeu na aula de matemática: multiplicação e divisão antes de adição e subtração, parênteses primeiro.

HTML
<script>
2 + 3 * 4     // 14, não 20
(2 + 3) * 4   // 20
</script>

Precedência comum da mais alta para a mais baixa: ()!*** / %+ -> < >= <=== === != !==&&||?:=.

Quando em dúvida, adicione parênteses. Parênteses são grátis, mas bugs são caros.


📖 Resumo

❓ Perguntas Frequentes

P:Por que "1" + 2 + 3"123" em vez de "15"? R:+ avalia da esquerda para a direita. "1" + 2 produz a string "12", depois "12" + 3"123". Para somar os números primeiro, use parênteses: "1" + (2 + 3)"15".

P:Por que 0 == false é true? R:== realiza coerção de tipo antes de comparar. Tanto 0 quanto false são convertidos para o número 0, então são iguais. É por isso que === é recomendado — ele não coerção, então 0 === false é false.

P:Qual a diferença entre x++ e ++x? R:Quando usados sozinhos, ambos incrementam x em 1. A diferença está no valor de retorno da expressão: x++ retorna o valor antigo antes do incremento, ++x retorna o novo valor após o incremento. Por exemplo, var a = 5; var b = a++; dá a=6, b=5; enquanto var a = 5; var b = ++a; dá a=6, b=6.

📝 Atividades

  1. Escreva um programa que recebe um número de três dígitos (ex: 371) e extrai seus dígitos de centena, dezena e unidade usando % e /, depois imprima-os.
  2. Sem usar if...else, escreva uma única linha usando o operador ternário para determinar se uma variável de ano year é um ano bissexto, e atribua o resultado a isLeap (dica: divisível por 4 e não por 100, ou divisível por 400).
  3. Preveja os resultados das seguintes expressões, depois verifique no console do navegador: [] == false, [] == ![], null == 0. Explique por quê — se não conseguir, significa que você precisa revisar as regras de coerção implícita de ==, e então abrace firmemente o ===.
100%