Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 53
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.