Vai al contenuto
eLearner.app
Modulo 2 · Lezione 4 di 48/32 nel corso~8 min
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:

JS
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'); // true

parseInt 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.

JS
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt('   12 anni'); // 12
parseInt('ciao12'); // NaN  ← deve iniziare con cifre

toFixed per formattare numeri come stringhe

Visto rapidamente nella lezione precedente: arrotonda a N decimali e restituisce una stringa.

JS
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'

Per riconvertirla in number usa il prefisso Number(...) o l'unary +:

JS
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14

NaN: il valore che ti morde

NaN ("Not a Number") nasce da operazioni numeriche che falliscono:

JS
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaN

Caratteristiche:

  • è 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)
JS
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // true

Prova tu

Esercizio#js.m2.l4.e1
Tentativi: 0Caricamento…

Data la stringa '128.95 EUR', estrai il numero (decimale) e arrotondalo alla prima cifra decimale, restituendolo come number. Atteso: 129.

Caricamento editor…
Mostra suggerimento

parseFloat ignora 'EUR'; .toFixed(0) arrotonda all'intero come stringa; Number(...) riconverte a number.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m2.l4.e2
Tentativi: 0Caricamento…

Dato `n = Number('non un numero')`, scrivi una sola espressione che valuta a true se il risultato e' NaN.

Caricamento editor…
Mostra suggerimento

Usa Number.isNaN, non n === NaN: NaN non e' uguale a se stesso.

Soluzione disponibile dopo 3 tentativi