Javascript Avanzado VIII

🔄 Conversión de tipos en JavaScript (a.k.a. la «magia» del lenguaje) Cuando hablamos de conversión en JavaScript nos referimos a cambiar el tipo de un valor (por ejemplo, de número a string) sin modificar directamente su contenido. Este cambio puede ser: Explícito: cuando lo hacemos de forma intencional (usando String(),…

🔄 Conversión de tipos en JavaScript (a.k.a. la «magia» del lenguaje)

Cuando hablamos de conversión en JavaScript nos referimos a cambiar el tipo de un valor (por ejemplo, de número a string) sin modificar directamente su contenido. Este cambio puede ser:

  • Explícito: cuando lo hacemos de forma intencional (usando String(), Number(), etc.)
  • Implícito: cuando JavaScript lo hace por nosotros (por ejemplo, en operaciones con + o al usar valores en if)

Esto se conoce como type coercion o type casting. Aunque JS lo hace por conveniencia, entender cuándo y cómo ocurre es esencial para evitar bugs difíciles de detectar.


🧠 ToString Abstract Operation

Cuando un valor necesita convertirse a string, entra en juego la ToString abstract operation definida en la especificación (sección 7.1). Esta operación tiene reglas detalladas sobre cómo tratar cada tipo:

  • undefined"undefined"
  • null"null"
  • true / false"true" / "false"
  • number → versión textual (0.1 → «0.1»)
  • object → llama internamente a ToPrimitive (más sobre eso después)
String(1);         // "1"
String(true);      // "true"
String(undefined); // "undefined"

En operaciones con el operador +, si uno de los operandos es un string, los valores se convertirán automáticamente a texto:

"El número es " + 42; // "El número es 42"

😬 Casos borde de conversión

En general, los valores primitivos se comportan de forma predecible. Pero cuando entramos en objetos o arrays, la conversión puede dar resultados inesperados:

[1,2,3].toString();       // "1,2,3"
[1,2,[3,4]].toString();   // "1,2,3,4"
[null, undefined].toString(); // ","

Recordá que los arrays son objetos, y los objetos tienen su propia forma de manejar la conversión gracias al método toString(). También se puede sobrescribir ese método (aunque no siempre es recomendable).


📦 JSON.stringify(): una herramienta poderosa y segura

JSON.stringify() es el método estándar para convertir un objeto o array en su representación textual JSON. Es diferente de toString() porque:

  • Devuelve un string JSON válido
  • Ignora propiedades con valores undefined, funciones o símbolos
  • Evita bucles circulares (aunque lanza error si los encuentra)
let foo = {
  bar: "baz",
  toJSON() {
    return "🔒";
  }
};

console.log(JSON.stringify(foo)); // "🔒"

Si un objeto tiene el método toJSON(), este se ejecuta antes de la serialización. Podés aprovechar esto para controlar qué se exporta.


🔧 Parámetros útiles de JSON.stringify

JSON.stringify() acepta hasta tres parámetros:

  1. value: el objeto a serializar
  2. replacer: función o array que filtra qué se incluye
  3. space: número o string usado para la indentación del resultado
let user = {
  name: "Ada",
  age: 30,
  password: "1234"
};

JSON.stringify(user, ["name", "age"], 2);
// Solo incluye name y age, con indentación de 2 espacios

También podés usar una función como replacer para manipular valores:

JSON.stringify(user, (key, value) => {
  if (key === "password") return undefined;
  return value;
});

Este truco es excelente para sanitizar datos antes de enviarlos al backend o guardarlos en localStorage.


🧯 Tips finales sobre conversión

  • ✔️ Usá String() para conversión explícita segura.
  • 🚫 Evitá confiar en +"" o +value para forzar tipos.
  • 📤 JSON.stringify()toString(): son propósitos distintos.
  • 🧙 toJSON() es tu aliado para controlar lo que se exporta.

🔗 Recursos útiles

+

Deja un comentario