Coerción de tipos
Bienvenido al campo minado más famoso de JavaScript. Aquí "5" + 1 no da 6, y
una comparación inocente puede salirte por donde no esperas. La buena noticia:
en cuanto entiendas la regla, dejas de pisar minas y aprendes a desactivarlas.
Coerción es la conversión automática de un tipo a otro que JavaScript hace por su cuenta. Puede ser muy cómoda... o muy confusa si no la entiendes.
El caso famoso: + con strings
El operador + tiene doble personalidad:
- Si ambos lados son números, suma.
- Si alguno es un string, concatena (pega textos).
console.log(5 + 1); // 6 → suma de números
console.log("5" + 1); // "51" → "5" es texto, así que 1 se convierte en "1"
Pero -, *, / solo saben de números
Los demás operadores aritméticos no tienen sentido con texto, así que JavaScript convierte el string a número antes de operar:
console.log("5" - 1); // 4 → "5" se convierte en 5
console.log("5" * 2); // 10
console.log("10" / 2); // 5
Por eso "5" + 1 da "51" pero "5" - 1 da 4. La diferencia está en el
operador, no en el dato.
⚠️ TRAMPA CLÁSICA. Aquí tropezamos todos: un dato que llega como texto (por ejemplo, lo que escribe el usuario en un formulario) más un
+y, en vez de sumar, JavaScript pega cadenas."5" + 1es"51", no6. Convierte a número tú mismo (conNumber(...)) antes de sumar y te ahorras el dolor de cabeza.
== vs ===
===(igualdad estricta): compara valor y tipo. No hace coerción.==(igualdad débil): convierte los tipos antes de comparar.
console.log(5 === "5"); // false → distinto tipo (number vs string)
console.log(5 == "5"); // true → "5" se convierte a 5 antes de comparar
console.log(0 == ""); // true → coerción sorprendente
console.log(null == undefined); // true
Regla de oro: usa siempre
===y!==. Evitan sorpresas y hacen tu código predecible. El==se reserva para casos muy concretos.
Has desactivado las minas más famosas de JavaScript. A partir de aquí, cuando
veas un == ajeno o un "5" + 1 sabrás exactamente qué está pasando, y eso
ya te separa de mucha gente que lleva años sin entenderlo.
Ejemplos
El + frente a los demás operadores
console.log("5" + 1); // "51"
console.log("5" - 1); // 4
console.log("5" * 2); // 10
Igualdad estricta vs débil
console.log(5 === "5"); // false
console.log(5 == "5"); // true