Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Addition (+)

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Der Additionsoperator (+) erzeugt entweder die Summe numerischer Operanden oder eine Zeichenfolgenverkettung.

Probieren Sie es aus

console.log(2 + 2);
// Expected output: 4

console.log(2 + true);
// Expected output: 3

console.log("hello " + "everyone");
// Expected output: "hello everyone"

console.log(2001 + ": A Space Odyssey");
// Expected output: "2001: A Space Odyssey"

Syntax

js
x + y

Beschreibung

Der +-Operator ist für zwei verschiedene Operationen überladen: numerische Addition und Zeichenfolgenverkettung. Bei der Auswertung werden zunächst beide Operanden in Primitive umgewandelt. Dann werden die Typen der beiden Operanden getestet:

  • Wenn eine Seite eine Zeichenfolge ist, wird der andere Operand ebenfalls in eine Zeichenfolge umgewandelt und sie werden verkettet.
  • Wenn beide BigInts sind, wird eine BigInt-Addition durchgeführt. Wenn eine Seite ein BigInt ist, die andere jedoch nicht, wird ein TypeError ausgelöst.
  • Ansonsten werden beide Seiten in Zahlen umgewandelt und eine numerische Addition wird durchgeführt.

Die Zeichenfolgenverkettung wird oft mit Template Literals oder String.prototype.concat() gleichgesetzt, aber das ist nicht der Fall. Der Addition-Operator zwingt den Ausdruck zu einem Primitiven, was in erster Linie valueOf() aufruft; dagegen zwingen Template Literals und concat() den Ausdruck zu einer Zeichenfolge, wodurch in erster Linie toString() aufgerufen wird. Wenn der Ausdruck eine [Symbol.toPrimitive]()-Methode hat, ruft die Zeichenfolgenverkettung sie mit dem Hinweis "default" auf, während Template Literals "string" verwenden. Dies ist wichtig für Objekte, die unterschiedliche Zeichenfolgen- und Primitive-Darstellungen haben — wie Temporal, dessen valueOf()-Methoden alle Ausnahmen auslösen.

js
const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'

Es wird empfohlen, nicht "" + x zu verwenden, um eine Zeichenfolgenumwandlung durchzuführen.

Beispiele

Addition mit Zahlen

js
1 + 2; // 3

Andere Werte, die keine Zeichenfolge und kein BigInt sind, werden in Zahlen umgewandelt:

js
true + 1; // 2
false + false; // 0

Addition mit BigInts

js
1n + 2n; // 3n

Sie können in der Addition keine BigInt- und Zahl-Operanden mischen. null, undefined und boolesche Werte werden in Zahlen umgewandelt und sind ebenfalls verboten.

js
1n + 2; // TypeError: Cannot mix BigInt and other types, use explicit conversions
2 + 1n; // TypeError: Cannot mix BigInt and other types, use explicit conversions

Zeichenfolgen haben Vorrang vor anderen Typen, daher führt das Hinzufügen einer Zeichenfolge zu einem BigInt zu einer Zeichenfolgenverkettung statt zu einem TypeError.

js
"1" + 2n; // "12"

Um eine Addition mit einem BigInt und einem Nicht-BigInt durchzuführen, konvertieren Sie einen der Operanden:

js
1n + BigInt(2); // 3n
Number(1n) + 2; // 3

Addition mit Zeichenfolgen

Wenn einer der Operanden eine Zeichenfolge ist, wird der andere in eine Zeichenfolge umgewandelt und sie werden verkettet:

js
"foo" + "bar"; // "foobar"
5 + "foo"; // "5foo"
"foo" + false; // "foofalse"
"2" + 2; // "22"

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-addition-operator-plus

Browser-Kompatibilität

Siehe auch