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
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
TypeErrorausgelö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.
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
1 + 2; // 3
Andere Werte, die keine Zeichenfolge und kein BigInt sind, werden in Zahlen umgewandelt:
true + 1; // 2
false + false; // 0
Addition mit BigInts
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.
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.
"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> |