🔄 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 enif)
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 aToPrimitive(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:
value: el objeto a serializarreplacer: función o array que filtra qué se incluyespace: 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+valuepara forzar tipos. - 📤
JSON.stringify()≠toString(): son propósitos distintos. - 🧙
toJSON()es tu aliado para controlar lo que se exporta.
🔗 Recursos útiles
Deja un comentario