Addition (+)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Der Additionsoperator (+) erzeugt die Summe numerischer Operanden oder die Verkettung von Zeichenfolgen.

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 wird zunächst beide Operanden zu Primitiven umgewandelt. Danach 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.
  • Andernfalls werden beide Seiten in Zahlen umgewandelt, und eine numerische Addition wird durchgeführt.

Die Zeichenfolgenverkettung wird oft für gleichwertig mit Template Literals oder String.prototype.concat() gehalten, ist es jedoch nicht. Die Addition wandelt den Ausdruck in ein Primitive um, was prioritär valueOf() aufruft; wohingegen Template Literals und concat() den Ausdruck in eine Zeichenfolge umwandeln, was priorisiert toString() aufruft. Wenn der Ausdruck eine [Symbol.toPrimitive]() Methode hat, ruft die Zeichenfolgenverkettung diese mit dem Hinweis "default" auf, während Template Literals "string" verwenden. Dies ist wichtig für Objekte, die unterschiedliche Darstellungen als Zeichenfolge und primitiv haben — wie z.B. Temporal, dessen Objekte Methoden valueOf() haben, die alle einen Fehler 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 Ihnen geraten, nicht "" + x zu verwenden, um eine Zeichenfolgenumwandlung durchzuführen.

Beispiele

Addition mit Zahlen

js
1 + 2; // 3

Andere nicht-zeichenfolgenartige, nicht-BigInt Werte werden in Zahlen umgewandelt:

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

Addition mit BigInts

js
1n + 2n; // 3n

Sie können BigInt und Zahlenoperanden bei der Addition nicht mischen.

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
"1" + 2n; // TypeError: Cannot mix BigInt and other types, use explicit conversions

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

Specification
ECMAScript® 2026 Language Specification
# sec-addition-operator-plus

Browser-Kompatibilität

Siehe auch