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:
- Se ambos os lados forem números, ele soma.
- Se algum for uma string, ele concatena (junta textos).
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 dá "51" mas "5" - 1 dá 4. 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ão6. Converta para número você mesmo (comNumber(...)) antes de somar e poupe a dor de cabeça.
== vs ===
===(igualdade estrita): compara valor e tipo. Não faz coerção.==(igualdade fraca): converte os tipos antes de comparar.
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