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 Addition (+) Operator erzeugt 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 unterschiedliche Operationen überladen: numerische Addition und Zeichenfolgenverkettung. Bei der Auswertung werden zunächst beide Operanden zu Primitiven konvertiert. Danach werden die Typen der beiden Operanden geprüft:

  • 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.
  • Andernfalls werden beide Seiten in Zahlen konvertiert, und es wird eine numerische Addition durchgeführt.

Die Zeichenfolgenverkettung wird oft als gleichwertig mit Template-Literalen oder String.prototype.concat() angesehen, aber sie sind es nicht. Die Addition zwingt den Ausdruck zu einem primitiven, was valueOf() mit Priorität aufruft; hingegen zwingen Template-Literale und concat() den Ausdruck in eine Zeichenfolge, was toString() mit Priorität aufruft. Wenn der Ausdruck eine [Symbol.toPrimitive]() Methode hat, ruft die Zeichenfolgenverkettung sie mit dem Hinweis "default" auf, während Template-Literale "string" verwenden. Dies ist wichtig für Objekte, die unterschiedliche Zeichenfolgen- und Primärdarstellungen haben — wie Temporal, dessen valueOf()-Methoden für alle Objekte eine Ausnahme werfen.

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, "" + x nicht zu verwenden, um eine Zeichenfolgenkonvertierung durchzuführen.

Beispiele

Addition mit Zahlen

js
1 + 2; // 3

Andere nicht-String-, nicht-BigInt-Werte werden in Zahlen konvertiert:

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

Addition mit BigInts

js
1n + 2n; // 3n

Sie können BigInt- und Nummern-Operanden in der Addition nicht mischen. null, undefined und boolesche Werte werden in Zahlen konvertiert 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, sodass das Hinzufügen einer Zeichenfolge zu einer BigInt eine Zeichenfolgenverkettung anstelle eines TypeErrors verursacht.

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