Gruppierungsoperator ( )
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 Gruppierungsoperator ( )
steuert die Reihenfolge der Auswertung in Ausdrücken. Er dient auch als Container für beliebige Ausdrücke in bestimmten syntaktischen Konstrukten, in denen es sonst zu Mehrdeutigkeiten oder Syntaxfehlern kommen könnte.
Probieren Sie es aus
console.log(1 + 2 * 3); // 1 + 6
// Expected output: 7
console.log(1 + (2 * 3)); // 1 + 6
// Expected output: 7
console.log((1 + 2) * 3); // 3 * 3
// Expected output: 9
console.log(1 * 3 + 2 * 3); // 3 + 6
// Expected output: 9
Syntax
(expression)
Parameter
expression
-
Jeder Ausdruck, der ausgewertet werden soll, einschließlich durch Kommas verbundener Ausdrücke.
Beschreibung
Der Gruppierungsoperator besteht aus einem Paar von Klammern um einen Ausdruck, der die Inhalte gruppiert. Der Operator überschreibt die normale Operatorpriorität, sodass Operatoren mit niedriger Priorität (so niedrig wie der Komma Operator) vor einem Operator mit höherer Priorität ausgewertet werden können.
Beispiele
Verwendung des Gruppierungsoperators
Auswerten von Addition und Subtraktion vor Multiplikation und Division.
const a = 1;
const b = 2;
const c = 3;
// default precedence
a + b * c; // 7
// evaluated by default like this
a + (b * c); // 7
// now overriding precedence
// addition before multiplication
(a + b) * c; // 9
// which is equivalent to
a * c + b * c; // 9
Beachten Sie in diesen Beispielen, dass sich die Reihenfolge der _Operatoren-_Auswertung geändert hat, nicht jedoch die Reihenfolge der _Operanden-_Auswertung. Zum Beispiel werden in diesem Code die Funktionsaufrufe a()
, b()
und c()
von links nach rechts ausgewertet (die normale Auswertungsreihenfolge), bevor die Operatorreihenfolge berücksichtigt wird.
a() * (b() + c());
Die Funktion a
wird vor der Funktion b
aufgerufen, die vor der Funktion c
aufgerufen wird. Weitere Informationen zur Operatorpriorität finden Sie auf der Referenzseite.
Verwendung des Gruppierungsoperators zur Beseitigung von Analysemehrdeutigkeiten
Ein Ausdrucksstattement kann nicht mit dem Schlüsselwort function
beginnen, da der Parser es sonst als Beginn einer Funktionsdeklaration ansehen würde. Das bedeutet, dass die folgende IIFE-Syntax ungültig ist:
function () {
// code
}();
Der Gruppierungsoperator kann verwendet werden, um diese Mehrdeutigkeit zu beseitigen, da der Parser, wenn er die linke Klammer sieht, weiß, dass das Folgende ein Ausdruck und keine Deklaration sein muss.
(function () {
// code
})();
Sie können auch den void
Operator verwenden, um Mehrdeutigkeiten zu beseitigen.
In einem Pfeilfunktions- Ausdrückskörper (einer, der direkt einen Ausdruck ohne das Schlüsselwort return
zurückgibt) kann der Gruppierungsoperator verwendet werden, um einen Objektliteral-Ausdruck zurückzugeben, da ansonsten die linke geschweifte Klammer als Beginn des Funktionskörpers interpretiert werden würde.
const f = () => ({ a: 1 });
Wenn eine Eigenschaft auf einem Zahlenliteral zugegriffen wird, könnte der Eigenschafts-Zugriffsoperator Punkt .
mit einem Dezimalpunkt verwechselt werden, es sei denn, die Zahl hat bereits einen Dezimalpunkt. Sie können Ganzzahlliterale in Klammern setzen, um diese Mehrdeutigkeit zu beseitigen.
(1).toString(); // "1"
Gruppierungsoperator und automatische Semikolon-Einfügung
Der Gruppierungsoperator kann automatische Semikolon-Einfügungs- (ASI) Fallstricke abmildern. Zum Beispiel dürfen zwischen dem return
Schlüsselwort und dem zurückgegebenen Ausdruck kein Zeilenumbruch stehen:
function sum(a, b) {
return
a + b;
}
Dieser Code wird undefined
zurückgeben, da direkt nach dem return
Schlüsselwort ein Semikolon eingefügt wird, was dazu führt, dass die Funktion sofort zurückkehrt, ohne a + b
auszuwerten. Falls der zurückgegebene Ausdruck lang ist und Sie ihn gut formatiert halten möchten, können Sie den Gruppierungsoperator verwenden, um anzuzeigen, dass dem return
Schlüsselwort ein Ausdruck folgt und die Semikolon-Einfügung zu verhindern:
function sum(a, b) {
return (
a + b
);
}
Allerdings kann das Gruppieren auch ASI-_Gefahren _einführen. Wenn eine Zeile mit einer linken Klammer beginnt und die vorherige Zeile mit einem Ausdruck endet, wird der Parser kein Semikolon vor dem Zeilenumbruch einfügen, da es sich in der Mitte eines Funktionsaufrufs befinden könnte. Zum Beispiel:
const a = 1
(1).toString()
Dieser Code würde wie folgt interpretiert werden:
const a = 1(1).toString();
Was "TypeError: 1 is not a function" auslöst. Wenn Ihr Codierungsstil keine Semikolons verwendet, denken Sie daran, dass, wenn eine Zeile mit einer linken Klammer beginnt, diese mit einem Semikolon vorzupenden. Diese Praxis wird von mehreren Formatierern und/oder Stilrichtlinien empfohlen, darunter Prettier und standard.
const a = 1
;(1).toString()
Für weitere Ratschläge zur Arbeit mit ASI sehen Sie im Referenzabschnitt nach.
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-grouping-operator |