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 Vorrangreihenfolge der Auswertung in Ausdrücken. Er fungiert außerdem als Container für beliebige Ausdrücke in bestimmten syntaktischen Konstrukten, bei denen ansonsten Mehrdeutigkeit oder Syntaxfehler auftreten würden.

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

js
(expression)

Parameter

expression

Jeder beliebige Ausdruck, der ausgewertet werden soll, einschließlich durch Komma verbundene Ausdrücke.

Beschreibung

Der Gruppierungsoperator besteht aus einem Paar von Klammern um einen Ausdruck, die den Inhalt gruppieren. Der Operator überschreibt die normale Operator-Vorrangreihenfolge, sodass Operatoren mit niedrigerer Priorität (so niedrig wie der Komma Operator) ausgewertet werden können, bevor ein Operator mit höherer Priorität ausgewertet wird.

Beispiele

Verwendung des Gruppierungsoperators

Addition und Subtraktion werden vor Multiplikation und Division ausgewertet.

js
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, in der die Operatoren ausgewertet werden, geändert hat, nicht jedoch die Reihenfolge, in der die Operanden ausgewertet werden. Zum Beispiel werden in diesem Code die Funktionsaufrufe a(), b() und c() von links nach rechts ausgewertet (die normale Auswertungsreihenfolge), bevor die Operatorenreihenfolge berücksichtigt wird.

js
a() * (b() + c());

Die Funktion a wird vor der Funktion b aufgerufen, die wiederum vor der Funktion c aufgerufen wird. Weitere Informationen zur Operator-Vorrangreihenfolge finden Sie auf der Referenzseite.

Verwendung des Gruppierungsoperators zur Beseitigung von Parser-Mehrdeutigkeiten

Eine Ausdrucksanweisung kann nicht mit dem Schlüsselwort function beginnen, da der Parser dies als Beginn einer Funktionsdeklaration betrachten würde. Dies bedeutet, dass die folgende IIFE Syntax ungültig ist:

js
function () {
  // code
}();

Der Gruppierungsoperator kann verwendet werden, um diese Mehrdeutigkeit zu beseitigen, da der Parser bei einer öffnenden Klammer erkennt, dass das Folgende ein Ausdruck statt einer Deklaration sein muss.

js
(function () {
  // code
})();

Sie können auch den void Operator verwenden, um Mehrdeutigkeit zu vermeiden.

Im Ausdruckskörper einer Arrow-Funktion (einer, die ohne das Schlüsselwort return direkt einen Ausdruck zurückgibt), kann der Gruppierungsoperator verwendet werden, um ein Objektliteral zurückzugeben, da sonst die linke geschweifte Klammer als Beginn des Funktionskörpers interpretiert würde.

js
const f = () => ({ a: 1 });

Wenn eine Eigenschaft auf einem Zahlenliteral zugegriffen wird, kann der Eigenschafts-Accessor 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 vermeiden.

js
(1).toString(); // "1"

Gruppierungsoperator und automatische Semikolon-Einfügung

Der Gruppierungsoperator kann Fallstricke bei der automatischen Semikolon-Einfügung (ASI) mindern. Zum Beispiel dürfen zwischen dem return-Schlüsselwort und dem zurückgegebenen Ausdruck keine Zeilenumbrüche stehen:

js
function sum(a, b) {
  return
    a + b;
}

Dieser Code wird undefined zurückgeben, weil 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 auf das return-Schlüsselwort ein Ausdruck folgt und die Semikolon-Einfügung zu verhindern:

js
function sum(a, b) {
  return (
    a + b
  );
}

Das Gruppieren kann jedoch auch ASI-Gefahren einführen. Wenn eine Zeile mit einer öffnenden Klammer beginnt und die vorherige Zeile mit einem Ausdruck endet, wird der Parser vor dem Zeilenumbruch kein Semikolon einfügen, weil es mitten in einem Funktionsaufruf sein könnte. Zum Beispiel:

js
const a = 1
(1).toString()

Dieser Code würde folgendermaßen geparst werden:

js
const a = 1(1).toString();

Was einen "TypeError: 1 is not a function" auslöst. Wenn Ihr Programmierstil keine Semikolons verwendet, denken Sie daran, wenn eine Zeile mit einer öffnenden Klammer beginnt, setzen Sie ein Semikolon davor. Diese Praxis wird von mehreren Formatierungswerkzeugen und/oder Styleguides empfohlen, einschließlich Prettier und standard.

js
const a = 1
;(1).toString()

Für weitere Ratschläge zur Arbeit mit ASI siehe den Referenzabschnitt.

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-grouping-operator

Browser-Kompatibilität

Siehe auch