Lezioni del modulo (4/4)
Conversioni di tipo
Continuamente devi trasformare il tipo di un valore: il value di un
input HTML arriva come stringa anche se rappresenta un numero, un'API ti
restituisce stringhe da formattare, devi loggare un oggetto come testo. JS
offre tre famiglie di conversioni: esplicite, parser dedicati, e (da
evitare) implicite.
Conversioni esplicite
Sono le più chiare e dovrebbero essere il tuo default:
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 e parseFloat: parser tolleranti
A differenza di Number(...), parseInt e parseFloat ignorano la coda
non numerica della stringa: si fermano al primo carattere non valido.
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt(' 12 anni'); // 12
parseInt('ciao12'); // NaN ← deve iniziare con cifretoFixed per formattare numeri come stringhe
Visto rapidamente nella lezione precedente: arrotonda a N decimali e restituisce una stringa.
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'Per riconvertirla in number usa il prefisso Number(...) o l'unary +:
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14NaN: il valore che ti morde
NaN ("Not a Number") nasce da operazioni numeriche che falliscono:
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaNCaratteristiche:
- è di tipo
'number'(sì, un "non-numero" è un numero) - non è uguale a se stesso:
NaN === NaNèfalse - per testarlo usa la funzione
Number.isNaN(x)
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // trueProva tu
Data la stringa '128.95 EUR', estrai il numero (decimale) e arrotondalo alla prima cifra decimale, restituendolo come number. Atteso: 129.
Mostra suggerimento
parseFloat ignora 'EUR'; .toFixed(0) arrotonda all'intero come stringa; Number(...) riconverte a number.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Dato `n = Number('non un numero')`, scrivi una sola espressione che valuta a true se il risultato e' NaN.
Mostra suggerimento
Usa Number.isNaN, non n === NaN: NaN non e' uguale a se stesso.
Soluzione disponibile dopo 3 tentativi