¿Cuál es la diferencia entre `==` y `===`?
Ver respuesta — intenta responderla en voz alta primero
=== compara valor y tipo sin convertir nada (igualdad estricta). == convierte los tipos antes de comparar (igualdad flexible con coerción). La recomendación es usar siempre ===.
===(igualdad estricta): solo devuelvetruesi ambos valores son del mismo tipo y tienen el mismo valor. No hace ninguna conversión.==(igualdad flexible): si los tipos difieren, JavaScript intenta convertirlos a un tipo común antes de comparar. Esto produce resultados sorprendentes.
Por eso la recomendación general es usar ===: es predecible y evita errores.
// === compara valor y tipo
console.log(5 === 5); // true
console.log(5 === "5"); // false (number vs string)
// == convierte los tipos antes de comparar
console.log(5 == "5"); // true ("5" se convierte a 5)
console.log(0 == false); // true (false se convierte a 0)
console.log("" == false); // true (ambos se convierten a 0)
console.log(null == undefined); // true (caso especial)
// Casos que confunden con ==
console.log([] == false); // true
console.log(" " == 0); // true (el espacio se convierte a 0)
// Con === todo es más predecible
console.log(0 === false); // false
console.log(null === undefined); // false
Usar == "porque funciona" en casos simples y luego toparse con errores raros como que [] == false sea true. Las reglas de coerción de == son difíciles de recordar y llevan a errores sutiles.
"
===es la igualdad estricta: compara valor y tipo sin convertir.==es la igualdad flexible: si los tipos no coinciden, JavaScript convierte uno de ellos antes de comparar, lo que produce resultados inesperados como que0 == falsesea true. Yo uso siempre===porque es predecible; solo usaría==a propósito para un caso concreto, comovalor == nullpara comprobar null y undefined a la vez."
Predice cada resultado:
console.log(1 == true);
console.log(1 === true);
console.log("0" == 0);
console.log("0" === 0);
Ver respuesta
true, false, true, false. Con == hay coerción (true se convierte a 1, "0" a 0); con === los tipos difieren, así que es false.