Lecciones del módulo (4/4)
Conversiones de tipo
Continuamente debes transformar el tipo de un valor: el value de un
input HTML llega como string aunque represente un número, una API te
devuelve strings para formatear, debes registrar un objeto como texto. JS
ofrece tres familias de conversiones: explícitas, parsers dedicados y (a
evitar) implícitas.
Conversiones explícitas
Son las más claras y deberían ser tu opción por defecto:
Number('42'); // 42
Number('3.14'); // 3.14
Number(''); // 0 ← attenzione
Number(' 10 '); // 10 (spazi vengono ignorati)
Number('ciao'); // NaN ← non rappresenta un numero
String(42); // '42'
String(true); // 'true'
String(null); // 'null'
String(undefined); // 'undefined'
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('abc'); // trueparseInt y parseFloat: parsers tolerantes
A diferencia de Number(...), parseInt y parseFloat ignoran la parte final
no numérica de la cadena: se detienen en el primer carácter no válido.
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt(' 12 anni'); // 12
parseInt('ciao12'); // NaN ← deve iniziare con cifretoFixed para formatear números como strings
Visto rápidamente en la lección anterior: redondea a N decimales y devuelve una cadena (string).
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'Para volver a convertirla a number, usa el prefijo Number(...) o el unary +:
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14NaN: el valor que te muerde
NaN ("Not a Number") nace de operaciones numéricas que fallan:
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaNCaracterísticas:
- es de tipo
'number'(sí, un "non-número" es un número) - no es igual a sí mismo:
NaN === NaNesfalse - para probarlo, usa la función
Number.isNaN(x)
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // truePruébalo tú mismo
Dada la cadena '128.95 EUR', extrae el número (decimal) y redondéalo a la primera cifra decimal, devolviéndolo como number. Esperado: 129.
Mostrar pista
parseFloat ignora 'EUR'; .toFixed(0) redondea al entero como string; Number(...) vuelve a convertir a number.
Solución disponible después de 3 intentos
Ejercicio de repaso
Dado `n = Number('non un numero')`, escribe una sola expresión que evalúe a true si el resultado es NaN.
Mostrar pista
Usa Number.isNaN, no n === NaN: NaN no es igual a sí mismo.
Solución disponible después de 3 intentos