DevPath · Aprenda a programar ESPTEN

Operadores e coerção

Coerção de tipos: == vs ===

Coerção de tipos

Bem-vindo ao campo minado mais famoso do JavaScript. Aqui "5" + 1 não dá 6, e uma comparação inocente pode explodir onde você menos espera. A boa notícia: assim que você pega a regra, para de pisar em minas e aprende a desarmá-las.

Coerção é a conversão automática de um tipo para outro que o JavaScript faz por conta própria. Pode ser muito cômoda... ou muito confusa se você não a entende.

O caso famoso: + com strings

O operador + tem dupla personalidade:

console.log(5 + 1);     // 6   → soma de números
console.log("5" + 1);   // "51" → "5" é texto, então 1 é convertido em "1"

Mas -, *, / só conhecem números

Os demais operadores aritméticos não fazem sentido com texto, então o JavaScript converte a string em número antes de operar:

console.log("5" - 1); // 4   → "5" é convertido em 5
console.log("5" * 2); // 10
console.log("10" / 2); // 5

Por isso "5" + 1"51" mas "5" - 14. A diferença está no operador, não no dado.

⚠️ ARMADILHA CLÁSSICA. É aqui que todo mundo tropeça: um dado que chega como texto (por exemplo, o que o usuário digita em um formulário) mais um + e, em vez de somar, o JavaScript cola as cadeias. "5" + 1 é "51", não 6. Converta para número você mesmo (com Number(...)) antes de somar e poupe a dor de cabeça.

== vs ===

console.log(5 === "5"); // false → tipo diferente (number vs string)
console.log(5 == "5");  // true  → "5" é convertido em 5 antes de comparar
console.log(0 == "");   // true  → coerção surpreendente
console.log(null == undefined); // true

Regra de ouro: use sempre === e !==. Evitam surpresas e tornam seu código previsível. O == fica reservado para casos muito específicos.

Você acabou de desarmar as minas mais famosas do JavaScript. De agora em diante, quando vir um == dos outros ou um "5" + 1, vai saber exatamente o que está acontecendo, e isso já te separa de muita gente que passa anos sem entender.

Exemplos

O + frente aos demais operadores

console.log("5" + 1); // "51"
console.log("5" - 1); // 4
console.log("5" * 2); // 10

Igualdade estrita vs fraca

console.log(5 === "5"); // false
console.log(5 == "5");  // true
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Comparação e operadores lógicosVer o módulo →