Lektionen des Moduls (4/4)
Typkonvertierungen
Du musst ständig den Typ eines Wertes umwandeln: Der value eines
HTML-Inputs wird als String geliefert, selbst wenn er eine Zahl darstellt,
eine API gibt dir Strings zurück, die du formatieren musst, oder du musst ein
Objekt als Text protokollieren. JS bietet drei Familien von Umwandlungen: explizite,
dedizierte Parser und (zu vermeiden) implizite.
Explizite Umwandlungen
Sie sind die klarsten und sollten dein Standard sein:
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 und parseFloat: tolerante Parser
Im Gegensatz zu Number(...) ignorieren parseInt und parseFloat das nicht-numerische Ende
des Strings: Sie stoppen beim ersten ungültigen Zeichen.
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt(' 12 anni'); // 12
parseInt('ciao12'); // NaN ← deve iniziare con cifretoFixed zur Formatierung von Zahlen als Strings
Kurz in der vorherigen Lektion gesehen: rundet auf N Dezimalstellen und gibt einen String zurück.
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'Um ihn wieder in eine number umzuwandeln, verwende das Präfix Number(...) oder das unäre +:
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14NaN: der Wert, der dich beißt
NaN ("Not a Number") entsteht bei fehlerhaften numerischen Operationen:
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaNEigenschaften:
- Es ist vom Typ
'number'(ja, eine "Nicht-Zahl" ist eine Zahl) - Es ist nicht gleich sich selbst:
NaN === NaNistfalse - Verwende zum Testen die Funktion
Number.isNaN(x)
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // trueProbier es aus
Extrahiere aus dem String '128.95 EUR' die Zahl (Dezimalzahl) und runde sie auf die erste Dezimalstelle, wobei das Ergebnis als number zurückgegeben werden soll. Erwartet: 129.
Hinweis anzeigen
parseFloat ignoriert 'EUR'; .toFixed(0) rundet auf die ganze Zahl als String; Number(...) wandelt wieder in number um.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Schreibe für gegebenes `n = Number('non un numero')` einen einzigen Ausdruck, der true ergibt, wenn das Ergebnis NaN ist.
Hinweis anzeigen
Verwende Number.isNaN, nicht n === NaN: NaN ist nicht gleich sich selbst.
Lösung nach 3 Versuchen verfügbar