Baseline Widely available
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.
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 Parameter
expression
Jeder Ausdruck, der ausgewertet werden soll, einschlieÃlich durch Kommas verbundener Ausdrücke.
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 GruppierungsoperatorsAuswerten 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.
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.
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.
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 Browser-Kompatibilität Siehe auchRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4