Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 88

4.8.1Der +-Operator

Оглавление

Der binäre +-Operator addiert numerische Operanden oder verkettet String-Operanden:

1 + 2 // => 3

"hello" + " " + "there" // => "hello there"

"1" + "2" // => "12"

Wenn die Werte der Operanden entweder nur Zahlen oder nur Strings sind, ist offensichtlich, was der +-Operator mit ihnen macht. In allen anderen Fällen sind hingegen Typumwandlungen erforderlich. Die Operation, die letztendlich ausgeführt wird, ist von diesen Umwandlungen abhängig. Die Umwandlungsregeln für + bevorzugen die String-Verkettung: Ist einer der Operanden ein String oder ein Objekt, das in einen String umgewandelt werden kann, wird der andere Operand in einen String umgewandelt, und eine String-Verkettung wird durchgeführt. Eine Addition erfolgt nur dann, wenn keiner der Operanden stringartig ist.

Formal verhält sich der +-Operator folgendermaßen:

 Ist einer seiner Operanden ein Objekt, wird dieses mit dem in 3.9.3 beschriebenen Algorithmus in einen Primitivwert konvertiert. Date-Objekte werden über ihre toString()-Methode umgewandelt, alle anderen Objekte über ihre valueOf()-Methode, falls diese Methode einen primitiven Wert liefert. Die meisten Objekte besitzen jedoch keine nützliche valueOf()-Methode und werden deswegen ebenfalls über toString() umgewandelt.

 Ist nach der Objekt-zu-Primitivwert-Umwandlung einer der Operanden ein String, wird der andere ebenfalls in einen String umgewandelt, und eine String-Verkettung wird durchgeführt.

 Andernfalls werden beide Operanden in Zahlen (oder NaN) konvertiert, die daraufhin addiert werden.

Hier einige Beispiele:

1 + 2 // => 3: Addition.

"1" + "2" // => "12": Verkettung.

"1" + 2 // => "12": Verkettung nach Zahl-zu-String-Umwandlung.

1 + {} // => "1[object Object]": Verkettung nach Objekt-zu-String-

// Umwandlung.

true + true // => 2: Addition nach Boolescher-Wert-zu-Zahl-Umwandlung.

2 + null // => 2: Addition nach Umwandlung von null in 0.

2 + undefined // => NaN: Addition nach Umwandlung von undefined in NaN.

Schließlich ist noch zu beachten, dass der Operator + bei Zeichenketten und Zahlen möglicherweise nicht assoziativ ist. Oder anders ausgedrückt: Das Ergebnis kann von der Reihenfolge abhängen, in der die Operationen durchgeführt werden.

Ein Beispiel:

1 + 2 + " blind mice" // => "3 blind mice"

1 + (2 + " blind mice") // => "12 blind mice"

Da die erste Zeile keine Klammern enthält und der +-Operator linksassoziativ ist, werden zunächst die beiden Zahlen addiert, bevor ihre Summe mit dem String verkettet wird. In der zweiten Zeile ändern Klammern die Abfolge dieser Operationen: Die Zahl 2 wird mit dem String verkettet, und es wird ein neuer String erzeugt. Dann wird die Zahl 1 mit dem neuen String verkettet, um das endgültige Ergebnis zu erzeugen.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх