← JavaScript

Fundamentos

¿Qué es la coerción de tipos en JavaScript y cuándo ocurre?

Ver respuesta — intenta responderla en voz alta primero

La coerción es la conversión automática de un tipo de dato a otro que hace JavaScript. Ocurre sobre todo con el operador + (que favorece las cadenas), con las comparaciones == y en contextos que esperan un booleano (if, !, etc.).

JavaScript a veces convierte tipos por su cuenta. Hay dos clases:

  • Coerción implícita: JavaScript lo hace automáticamente. Por ejemplo, "5" + 1 da "51" porque convierte el número a cadena.
  • Coerción explícita: la haces a propósito, con Number(...), String(...), Boolean(...).

Casos clave:

  • + con una cadena convierte todo a cadena y concatena.
  • Los demás operadores matemáticos (-, *, /) convierten a número.
  • En un if, los valores se convierten a booleano. Los valores falsy son: false, 0, "", null, undefined, NaN. Todo lo demás es truthy.
// + con una cadena concatena
console.log("5" + 1);   // "51"  (1 se vuelve "1")
console.log(1 + "5");   // "15"

// otros operadores convierten a número
console.log("5" - 1);   // 4   ("5" se vuelve 5)
console.log("5" * 2);   // 10
console.log("abc" - 1); // NaN (no se puede convertir)

// coerción a booleano (valores falsy)
if (!"") console.log("la cadena vacía es falsy");
if (!0) console.log("el cero es falsy");
if (!null) console.log("null es falsy");

// coerción explícita (recomendada cuando quieres control)
console.log(Number("42"));   // 42
console.log(String(42));     // "42"
console.log(Boolean(""));    // false

Confundirse con cómo se comporta +. Muchos juniors esperan que "5" + 1 sea 6, pero es "51" porque + con una cadena concatena en lugar de sumar. En cambio, "5" - 1 sí da 4.

"La coerción es cuando JavaScript convierte automáticamente un tipo en otro. El caso más famoso es el operador +: si uno de los operandos es una cadena, convierte todo a cadena y concatena, por eso '5' + 1 es '51'. Los demás operadores matemáticos convierten a número. También hay coerción a booleano en los if, donde los valores falsy son false, 0, '', null, undefined y NaN. Para evitar sorpresas, prefiero hacer conversiones explícitas con Number() o String()."

Reto rápido

¿Qué imprime esto?

console.log(true + 1);
console.log("10" - "4");
console.log([] + []);
Ver respuesta

2 (true se convierte a 1), 6 (ambas cadenas se convierten a números) y "" (dos arreglos vacíos se convierten a cadenas vacías y se concatenan).