Название | JavaScript – Das Handbuch für die Praxis |
---|---|
Автор произведения | David Flanagan |
Жанр | Математика |
Серия | |
Издательство | Математика |
Год выпуска | 0 |
isbn | 9783960104926 |
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.
3.9.1Umwandlungen und Gleichheit
JavaScript kennt zwei Operatoren, die prüfen, ob zwei Werte gleich sind. Der strikte Gleichheitsoperator === betrachtet seine Operanden nicht als gleich, wenn sie nicht vom gleichen Typ sind – dieser Operator ist beim Programmieren fast immer die richtige Wahl. Aber weil JavaScript bei Typumwandlungen so flexibel ist, gibt es auch den Operator ==, der eine losere Definition von Gleichheit nutzt. Alle nachfolgenden Vergleiche sind beispielsweise wahr:
null == undefined // => true: Diese beiden Werte werden als gleich betrachtet.
"0" == 0 // => true: Der String wird vor dem Vergleich in eine Zahl
// umgewandelt.
0 == false // => true: Der boolesche Wert wird vor dem Vergleich in eine
// Zahl umgewandelt.
"0" == false // => true: Beide Operanden werden vor dem Vergleich in 0
// umgewandelt!
In 4.9.1 wird genau erklärt, welche Konvertierungen der ==-Operator vornimmt, um zu bestimmen, ob zwei Werte als gleichwertig betrachtet werden sollen.
Die Umwandelbarkeit zweier Werte impliziert übrigens nicht, dass diese beiden Werte auch gleich sind. Wird undefined an einer Stelle angegeben, an der ein boolescher Wert erwartet wird, wird es in false umgewandelt. Aber das bedeutet nicht, dass undefined == false gilt. JavaScript-Operatoren und -Anweisungen erwarten Werte unterschiedlicher Typen und führen Umwandlungen in diese Typen durch. Die if-Anweisung wandelt undefined in false um, aber der ==-Operator versucht nie, seine Operanden in boolesche Werte umzuwandeln.
3.9.2Explizite Umwandlung
Obgleich JavaScript viele Typumwandlungen automatisch durchführt, werden Sie gelegentlich Umwandlungen explizit vornehmen müssen oder möchten dies vielleicht einfach tun, um den Code verständlicher zu gestalten.
Am einfachsten können Sie eine explizite Typumwandlung mit den Funktionen Boolean(), Number() und String() vornehmen:
Number("3") // => 3
String(false) // => "false": Oder verwenden Sie false.toString().
Boolean([]) // => true
Alle Werte außer null und undefined besitzen eine toString()-Methode, deren Ergebnis üblicherweise dem entspricht, was von der Funktion String() geliefert wird.
Übrigens können die Funktionen Boolean(), Number() und String() auch – mit new – als Konstruktor aufgerufen werden. Auf diese Weise erhalten Sie ein Wrapper-Objekt, das sich genauso verhält wie ein einfacher boolescher Wert, ein Zahlen- oder ein String-Wert. Diese Wrapper-Objekte sind ein historisches Überbleibsel aus den frühesten Tagen von JavaScript, und es gibt keinen guten Grund, sie zu verwenden.
Bestimmte JavaScript-Operatoren führen implizite Typumwandlungen durch und werden gelegentlich explizit eingesetzt, um eine Umwandlung zu erzwingen. Ist einer der Operanden des +-Operators