Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 59
Umwandlungen durch einige spezielle Operatoren
ОглавлениеOperatoren werden ausführlich in Kapitel 4 behandelt. Hier erläutern wir einige spezielle Operatoren, die nicht die zuvor beschriebenen grundlegenden Objekt-zu-String- und Objekt-zu-Zahl-Konvertierungen verwenden.
Der +-Operator führt numerische Additionen und String-Verkettungen durch. Wenn einer seiner Operanden ein Objekt ist, konvertiert JavaScript beide mithilfe des no-preference-Algorithmus in primitive Werte. Sobald dem Operator zwei primitive Werte vorliegen, prüft er deren Typ. Wenn eines der beiden Argumente eine Zeichenfolge ist, wandelt er das andere ebenfalls in eine Zeichenfolge um und verkettet beide. Andernfalls werden beide Argumente in Zahlen umgewandelt und addiert.
Die Operatoren == und != führen als sogenannte nicht-strikte Operatoren Gleichheits- und Ungleichheitsprüfungen in einer loseren Weise durch, die Typumwandlungen erlaubt. Wenn ein Operand ein Objekt und der andere ein primitiver Wert ist, konvertieren diese Operatoren das Objekt mit dem no-preference-Algorithmus ebenfalls in einen Primitivwert und vergleichen danach beide.
Zu guter Letzt vergleichen die relationalen Operatoren <, <=, >, und >= die Reihenfolge ihrer Operanden, die sowohl Zahlen als auch Strings sein dürfen. Wenn einer der Operanden ein Objekt ist, wird er mit dem Algorithmus prefer-number in einen primitiven Wert konvertiert. Allerdings werden im Gegensatz zur Objekt-zu-Zahl-Konvertierung die von prefer-number zurückgegebenen primitiven Werte danach nicht in Zahlen umgewandelt.
Zu beachten ist außerdem, dass zwar die numerische Darstellung von Datumsobjekten mit < und > sinnvoll vergleichbar ist, die String-Darstellung jedoch nicht. Date-Objekte wandelt der no-preference-Algorithmus in eine Zeichenfolge um. Da JavaScript bei relationalen Operatoren aber den prefer-number-Algorithmus verwendet, können wir mit ihrer Hilfe die Reihenfolge von zwei Date-Objekten vergleichen.