Salt la conținutul principal
Modulul 2 · Lecția 4 din 48/32 în curs~8 min
Lecții din modul (4/4)

Conversii de tip

Tot timpul trebuie să transformați tipul unei valori: value de o intrare HTML ajunge sub formă de șir chiar dacă reprezintă un număr, un API returnează șirurile la format, trebuie să înregistrați un obiect ca text. JS oferă trei familii de conversii: parsere explicite, dedicate și (a fi evitate) implicite.

Conversii explicite

Acestea sunt cele mai clare și ar trebui să fie implicite:

JS
Number('42'); // 42
Number('3.14'); // 3.14
Number(''); // 0     ← careful
Number('  10 '); // 10     (spaces are ignored)
Number('ciao'); // NaN    ← does not represent a number

String(42); // '42'
String(true); // 'true'
String(null); // 'null'
String(undefined); // 'undefined'

Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('abc'); // true

parseInt și parseFloat: analizatori toleranți

Spre deosebire de Number(...), parseInt și parseFloat ignorați caracterul non-numeric coada șirului: se opresc la primul caracter nevalid.

JS
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt('   12 anni'); // 12
parseInt('ciao12'); // NaN  ← must start with digits

toFixed pentru a formata numerele ca șiruri

Văzut pe scurt în lecția anterioară: rotunjește la N zecimale și returnează a șir.

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

Pentru a-l converti înapoi într-un number, utilizați prefixul Number(...) sau unar +:

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

NaN: valoarea care mușcă

NaN ("Nu este un număr") este produs de operații numerice care eșuează:

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

Caracteristici:

  • are tipul 'number' (da, un „non-număr” este un număr)
  • nu este egal cu el însuși: NaN === NaN este false
  • pentru a-l testa utilizați funcția Number.isNaN(x)
JS
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // true

Încearcă

Exercițiu#js.m2.l4.e1
Încercări: 0Se încarcă…

Având în vedere șirul „128,95 EUR”, extrageți numărul (zecimal) și rotunjiți-l la cel mai apropiat număr întreg, returnându-l ca număr. Așteptată: 129.

Se încarcă editorul...
Afișează indiciu

parseFloat ignoră „EUR”; .toFixed(0) se rotunjește la un număr întreg ca șir; Number(...) se convertește înapoi într-un număr.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#js.m2.l4.e2
Încercări: 0Se încarcă…

Având în vedere `n = Number('non un numero')`, scrieți o singură expresie care se evaluează la adevărat dacă rezultatul este NaN.

Se încarcă editorul...
Afișează indiciu

Utilizați Number.isNaN, nu n === NaN: NaN nu este egal cu el însuși.

Soluție disponibilă după 3 încercări