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
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
TypeErrorausgelö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.
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
1 + 2; // 3
Andere nicht-String-, nicht-BigInt-Werte werden in Zahlen konvertiert:
true + 1; // 2
false + false; // 0
Addition mit BigInts
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.
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.
"1" + 2n; // "12"
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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-addition-operator-plus> |