Appearance
Conversión de tipos
En JavaScript, cada valor pertenece a un tipo de dato. Por ejemplo:
js
console.log(typeof "25"); // string
console.log(typeof 25); // number
console.log(typeof true); // booleanEn muchas ocasiones es necesario transformar un valor de un tipo en otro. A este proceso se le denomina conversión de tipos.
js
const price = "25";
const numericPrice = Number(price);
console.log(numericPrice); // 25
console.log(typeof numericPrice); // numberJavaScript puede realizar estas conversiones de dos formas:
- Conversión implícita: el propio lenguaje convierte automáticamente un valor cuando una operación necesita otro tipo.
- Conversión explícita: el desarrollador solicita la conversión mediante funciones como
Number(),String()oBoolean().
INFO
JavaScript es un lenguaje de tipado dinámico, por lo que una misma variable puede almacenar valores de distintos tipos durante la ejecución del programa.
js
let value = 10;
value = "Ten";Conversión implícita
La conversión implícita (también llamada coerción de tipos) ocurre cuando JavaScript transforma automáticamente un valor para poder realizar una operación.
El operador +
El operador + puede comportarse de dos maneras:
- Sumar números.
- Concatenar cadenas.
js
console.log(5 + 2); // 7
console.log("5" + 2); // "52"
console.log(5 + "2"); // "52"Si alguno de los operandos es una cadena, normalmente el resultado también será una cadena.
Cuando intervienen varias operaciones, la evaluación se realiza de izquierda a derecha.
js
console.log(5 + 2 + "3"); // "73"
console.log("5" + 2 + 3); // "523"TIP
Cuando combines texto y números, utiliza plantillas de cadena.
js
const total = 10;
console.log(`Total: ${total} €`);Operadores aritméticos
Los operadores -, *, /, % y ** siempre realizan operaciones numéricas.
js
console.log("10" - 3); // 7
console.log("10" * 3); // 30
console.log("10" / 2); // 5Si la cadena no representa un número válido, el resultado es NaN.
js
console.log("Hello" * 2); // NaNComparaciones
Cuando se comparan valores de distintos tipos, JavaScript puede convertirlos automáticamente.
js
console.log("10" > 5); // trueSin embargo, si ambos operandos son cadenas, la comparación es alfabética.
js
console.log("10" > "5"); // falseIgualdad
La igualdad débil (==) convierte los operandos antes de compararlos.
js
console.log("5" == 5); // trueLa igualdad estricta (===) no realiza ninguna conversión.
js
console.log("5" === 5); // falseWARNING
En la práctica se recomienda utilizar siempre === y !==.
#@# Valores truthy y falsy
Cuando JavaScript evalúa una condición convierte automáticamente el valor en un booleano.
Los únicos valores falsy son:
false0-00n""nullundefinedNaN
Todo lo demás es truthy.
js
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean("0")); // true
console.log(Boolean([])); // true
console.log(Boolean({})); // trueEl operador ! invierte el resultado y la doble negación (!!) permite obtener el booleano equivalente.
js
console.log(!0); // true
console.log(!!"Hello"); // trueConversión explícita
La conversión explícita se produce cuando el desarrollador transforma un valor de un tipo en otro de forma intencionada.
JavaScript proporciona varias funciones para realizar estas conversiones:
Number()String()Boolean()parseInt()parseFloat()
js
const value = "25";
console.log(Number(value)); // 25
console.log(String(25)); // "25"
console.log(Boolean(value)); // trueA diferencia de la conversión implícita, el código expresa claramente qué tipo de dato se espera obtener.
TIP
Siempre que sea posible, utiliza conversiones explícitas. El código resulta más claro y evita errores difíciles de detectar.
Number()
Number() convierte un valor en un número.
js
console.log(Number("25")); // 25
console.log(Number("3.14")); // 3.14
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(null)); // 0Si el valor no puede convertirse completamente en un número, devuelve NaN.
js
console.log(Number("25px")); // NaN
console.log(Number("Hello")); // NaNString()
String() convierte cualquier valor en una cadena.
js
console.log(String(25)); // "25"
console.log(String(true)); // "true"
console.log(String(null)); // "null"
console.log(String(undefined)); // "undefined"También es habitual convertir valores en cadenas al construir mensajes.
js
const age = 20;
console.log("Age: " + age);
console.log(`Age: ${age}`);Las plantillas de cadena suelen ser la opción más legible.
Boolean()
Boolean() convierte cualquier valor en true o false.
js
console.log(Boolean(1)); // true
console.log(Boolean("Hello")); // true
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // falseEs importante recordar que el contenido de una cadena no se interpreta.
js
console.log(Boolean("false")); // true
console.log(Boolean("0")); // trueAmbas cadenas contienen caracteres y, por tanto, son truthy.
parseInt()
parseInt() interpreta una cadena como un número entero.
js
console.log(parseInt("25")); // 25
console.log(parseInt("3.14")); // 3
console.log(parseInt("25px")); // 25Si la cadena no comienza por un número válido, devuelve NaN.
js
console.log(parseInt("Hello")); // NaNEs recomendable indicar siempre la base numérica.
js
parseInt("25", 10);parseFloat()
parseFloat() funciona de forma similar, pero conserva la parte decimal.
js
console.log(parseFloat("3.14")); // 3.14
console.log(parseFloat("3.14px")); // 3.14
console.log(parseFloat("Hello")); // NaN¿Cuál utilizar?
| Función | Uso recomendado |
|---|---|
Number() | Convertir una cadena que debe ser completamente numérica. |
String() | Convertir cualquier valor en texto. |
Boolean() | Obtener el valor lógico equivalente. |
parseInt() | Extraer un número entero del inicio de una cadena. |
parseFloat() | Extraer un número decimal del inicio de una cadena. |
NaN e Infinity
NaN (Not a Number) indica que una operación numérica no ha podido producir un resultado válido.
js
console.log(Number("Hello")); // NaN
console.log(0 / 0); // NaNAunque su nombre pueda resultar extraño, pertenece al tipo number.
js
console.log(typeof NaN); // "number"Para comprobar si un valor es NaN, utiliza Number.isNaN().
js
const value = Number("Hello");
console.log(Number.isNaN(value)); // trueJavaScript también dispone de los valores especiales Infinity y -Infinity, que representan el infinito positivo y negativo.
js
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -InfinityPuedes comprobar si un resultado es un número finito mediante Number.isFinite().
js
console.log(Number.isFinite(25)); // true
console.log(Number.isFinite(Infinity)); // falseErrores frecuentes
Los errores más habituales relacionados con la conversión de tipos son:
- Pensar que
+siempre suma.
js
console.log("5" + 2); // "52"- Utilizar
==en lugar de===.
js
console.log("5" == 5); // true
console.log("5" === 5); // false- Creer que
"false"equivale afalse.
js
console.log(Boolean("false")); // true- Comparar directamente con
NaN.
js
// Incorrecto
value === NaN;
// Correcto
Number.isNaN(value);Resumen
- JavaScript puede convertir valores de forma implícita o explícita.
- El operador
+puede sumar o concatenar. - Los operadores aritméticos convierten automáticamente cadenas numéricas en números.
Number(),String()yBoolean()realizan conversiones explícitas.parseInt()obtiene un entero yparseFloat()conserva los decimales.- Los valores truthy y falsy determinan el resultado de las condiciones.
NaNrepresenta un resultado numérico no válido.===y!==son preferibles a==y!=.- Las conversiones explícitas hacen el código más claro y seguro.
Idea clave
No memorices todas las conversiones posibles. Recuerda únicamente las más habituales y, cuando tengas dudas, realiza la conversión de forma explícita mediante Number(), String() o Boolean().