Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 52
3.9Typumwandlungen
ОглавлениеJavaScript ist sehr flexibel, was die benötigten Wertetypen betrifft. Bei booleschen Werten haben wir das bereits gesehen: Erwartet JavaScript einen booleschen Wert, können Sie einen Wert beliebigen Typs angeben, der von JavaScript in die erforderliche Form umgewandelt wird. Einige Werte (truthy-Werte) werden in true umgewandelt, andere (falsy-Werte) in false. Das Gleiche geschieht auch bei anderen Werten: Benötigt JavaScript einen String, wandelt es den von Ihnen übergebenen Wert in einen String um. Benötigt JavaScript eine Zahl, versucht es, den angegebenen Wert in eine Zahl umzuwandeln (oder wandelt ihn in NaN um, wenn keine sinnvolle Konvertierung möglich ist).
Ein paar Beispiele:
10 + "objects" // => "10 objects": Die Zahl 10 wird in einen String
// umgewandelt.
"7" * "4" // => 28: Beide Strings werden in Zahlen umgewandelt.
let n = 1 - "x"; // => NaN: Der String "x" kann nicht in eine Zahl
// umgewandelt werden.
n + " objects" // => "NaN objects": NaN wird in die Zeichenfolge "NaN"
// umgewandelt.
Tabelle 3-2 fasst zusammen, wie Werte in JavaScript von einem Typ in einen anderen umgewandelt werden. Fett gedruckte Tabelleneinträge kennzeichnen Umwandlungen, die Ihnen vielleicht überraschend vorkommen mögen. Leere Zellen zeigen an, dass keine Umwandlung erforderlich ist und auch keine durchgeführt wird.
Tabelle 3-2: Typumwandlungen in JavaScript
Wert | Umgewandelt in String | Umgewandelt in Zahl | Umgewandelt in booleschen Wert |
undefined | "undefined" | NaN | false |
null | "null" | 0 | false |
true | "true" | 1 | |
false | "false" | 0 | |
"" (leerer String) | 0 | false | |
"1.2" (nicht leer, numerisch) | 1.2 | true | |
"one" (nicht leer, nicht numerisch) | NaN | true | |
0 | "0" | false | |
-0 | "0" | false | |
1 (endlich, ungleich null) | "1" | true | |
Infinity | "Infinity" | true | |
-Infinity | "-Infinity" | true | |
NaN | "NaN" | false | |
{} (alle Objekte) | siehe 3.9.3 | siehe 3.9.3 | true |
[] (leeres Array) | "" | 0 | true |
[9] (ein numerisches Element) | "9" | 9 | true |
['a'] (alle anderen Arrays) | join()-Methode benutzen | NaN | true |
function(){} (alle Funktionen) | siehe 3.9.3 | NaN | true |
Die in der Tabelle aufgeführten Umwandlungen primitiver Typen in andere primitive Typen sind recht einfach. Die Umwandlung in boolesche Werte wurde bereits in 3.4 diskutiert. Die Umwandlung in Strings ist für alle Werte primitiver Typen wohldefiniert. Die Umwandlung in eine Zahl ist etwas komplizierter. Strings, die als Zahl geparst werden können, werden in diese Zahl umgewandelt. Whitespace-Zeichen vor und nach dem Wert sind erlaubt. Stehen vor oder nach dem Wert Zeichen, die nicht in einem numerischen Literal enthalten sein dürfen, ergibt die Umwandlung des Strings in eine Zahl NaN. Einige numerische Umwandlungen mögen überraschend erscheinen: true wird zu 1 konvertiert, und false und der leere String werden zu 0 konvertiert.
Die Umwandlung von Objekten in Werte primitiver Typen ist etwas komplizierter und wird in 3.9.3 behandelt.