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
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.
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
1 + 2; // 3
Andere nicht-zeichenfolgenartige, nicht-BigInt Werte werden in Zahlen umgewandelt:
true + 1; // 2
false + false; // 0
Addition mit BigInts
1n + 2n; // 3n
Sie können BigInt und Zahlenoperanden bei der Addition nicht mischen.
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:
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:
"foo" + "bar"; // "foobar"
5 + "foo"; // "5foo"
"foo" + false; // "foofalse"
"2" + 2; // "22"
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-addition-operator-plus |