Conversion de tipos
En JavaScript, la conversión de tipos (type conversion) y la coerción de tipos (type coercion) son dos mecanismos utilizados para transformar un valor de un tipo de datos a otro. Aunque a veces se usan de forma intercambiable.
Conversión de Tipos (Type Conversion)
La conversión de tipos es un proceso explícito en el cual el desarrollador convierte manualmente un valor de un tipo a otro, utilizando funciones o métodos específicos. Es una operación deliberada y controlada que depende de funciones o técnicas programáticas.
Ejemplos de conversión explícita
- Conversión a String: Se puede convertir un número a un string usando
String()
o el método.toString()
.
const numero = 42;
const cadena = String(numero); // "42"
- Conversión a Número: Puedes convertir un string a un número usando
Number()
,parseInt()
, oparseFloat()
.
const cadena = "42";
const numero = Number(cadena); // 42
- Conversión a Booleano: Puedes convertir un valor a booleano usando
Boolean()
.
const valor = 0;
const bool = Boolean(valor); // false
Coerción de Tipos (Type Coercion)
La coerción de tipos es un proceso implícito en el que JavaScript convierte automáticamente un tipo de datos a otro para poder realizar una operación. En otras palabras, JavaScript fuerza la conversión de un tipo cuando se necesita para que la operación funcione. Esto ocurre principalmente en operaciones con operadores como +
, ==
, ===
, entre otros.
Coerción implícita
Es cuando JavaScript convierte un tipo a otro de manera automática, sin intervención explícita del desarrollador. Esto ocurre en operaciones donde los operandos son de diferentes tipos y se necesita una conversión para continuar la ejecución.
- Coerción a string: Cuando el operador
+
se utiliza con un string y un número, JavaScript convierte el número a string para realizar la concatenación.
const resultado = "El valor es " + 42; // "El valor es 42"
- Coerción a número: Cuando se usa un operador como
-
,*
, o/
entre un string y un número, JavaScript intentará convertir el string a número.
const resultado = "5" - 2; // 3 (el string "5" es convertido a número)
Coerción explicita
Aunque esto es más cercano a la conversión de tipos, también puede considerarse coerción cuando se realiza de forma intencional pero sin usar los métodos de conversión explícitos, como al sumar +
antes de un string para convertirlo en número.
const cadena = "42";
const numero = +cadena; // 42
Conversión de objetos
JavaScript no permite personalizar cómo los operadores trabajan con los objetos. Al contrario de otros lenguajes de programación como Ruby o C++, no podemos implementar un método especial para manejar una suma (u otros operadores).
En ese caso, los objetos se convierten automáticamente en valores primitivos, y luego se lleva a cabo la operación sobre esos primitivos, y resultan en un valor primitivo.
Esto es una limitación importante: el resultado de obj1 + obj2
(u otra operación) ¡no puede ser otro objeto!
Por ejemplo no podemos hacer objetos que representen vectores o matrices (o conquistas o lo que sea), sumarlas y esperar un objeto “sumado” como resultado. Tal objetivo arquitectural cae automáticamente “fuera del tablero”.