| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Grouping | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Der Gruppierungsoperator ( ) steuert die Auswertungsreihenfolge in Ausdrcken. Er fungiert auch als Container fr beliebige Ausdrcke in bestimmten syntaktischen Konstrukten, wo ansonsten Ambiguitt oder Syntaxfehler auftreten wrden.
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
(expression)
expressionJeder Ausdruck, der ausgewertet werden soll, einschlielich komma-getrennter Ausdrcke.
Der Gruppierungsoperator besteht aus einem Paar Klammern um einen Ausdruck, das die Inhalte gruppiert. Der Operator setzt die normale Operatorprzedenz auer Kraft, sodass Operatoren mit niedrigerer Przedenz (so niedrig wie der Komma-Operator) vor einem Operator mit hherer Przedenz ausgewertet werden knnen.
Addition und Subtraktion werden vor Multiplikation und Division ausgewertet.
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, gendert 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 (die normale Auswertungsreihenfolge) ausgewertet, bevor die Operatorreihenfolge bercksichtigt wird.
a() * (b() + c());
Die Funktion a wird vor der Funktion b aufgerufen, die wiederum vor der Funktion c aufgerufen wird. Weitere Informationen zur Operatorprzedenz finden Sie auf der Referenzseite.
Ein Ausdrucksstaatssatz kann nicht mit dem Schlsselwort function beginnen, da der Parser dies als Beginn einer Funktionsdeklaration ansehen wrde. Dies bedeutet, dass die folgende IIFE-Syntax ungltig ist:
function () {
// code
}();
Der Gruppierungsoperator kann verwendet werden, um diese Ambiguitt zu beseitigen, da der Parser bei Anblick der linken Klammer wei, dass das Folgende ein Ausdruck und keine Deklaration sein muss.
(function () {
// code
})();
Sie knnen auch den void Operator verwenden, um Ambiguitten zu beseitigen.
In einem Arrow-Funktions-Ausdruckskrper (einer, der direkt einen Ausdruck ohne das Schlsselwort return zurckgibt) kann der Gruppierungsoperator verwendet werden, um ein Objektliteral zurckzugeben, da sonst die linke geschweifte Klammer als Beginn des Funktionskrpers interpretiert wrde.
const f = () => ({ a: 1 });
Wenn auf ein Zahlenliteral eine Eigenschaft zugegriffen wird, kann der Eigenschafts-Zugriffs-Operator Punkt . mit einem Dezimalpunkt verwechselt werden, es sei denn, die Zahl hat bereits einen Dezimalpunkt. Sie knnen ganze Zahlenliterale in Klammern setzen, um diese Ambiguitt zu beseitigen.
(1).toString(); // "1"
Der Gruppierungsoperator kann automatische Semikolon-Einfgungs (ASI) Probleme abmildern. Zum Beispiel knnen das return-Schlsselwort und der zurckgegebene Ausdruck keinen Zeilenumbruch enthalten:
function sum(a, b) {
return
a + b;
}
Dieser Code wird undefined zurckgeben, da ein Semikolon direkt nach dem return-Schlsselwort eingefgt wird, was dazu fhrt, dass die Funktion sofort zurckkehrt, ohne a + b auszuwerten. Wenn der zurckgegebene Ausdruck lang ist und Sie ihn gut formatiert halten mchten, knnen Sie den Gruppierungsoperator verwenden, um anzuzeigen, dass dem return-Schlsselwort ein Ausdruck folgt, und um die Semikolon-Einfgung zu verhindern:
function sum(a, b) {
return (
a + b
);
}
Gruppierungen knnen jedoch auch ASI-Gefahren einfhren. Wenn eine Zeile mit einer linken Klammer beginnt und die vorherige Zeile mit einem Ausdruck endet, fgt der Parser vor dem Zeilenumbruch kein Semikolon ein, da es sich um die Mitte eines Funktionsaufrufs handeln knnte. Zum Beispiel:
const a = 1
(1).toString()
Dieser Code wrde so geparst werden:
const a = 1(1).toString();
Was "TypeError: 1 is not a function" auslst. Wenn Ihr Coding-Stil keine Semikolons verwendet, denken Sie daran, dass Sie, wenn eine Zeile mit einer linken Klammer beginnt, sie mit einem Semikolon voranstellen sollten. Diese Praxis wird von mehreren Formatierern und/oder Stilrichtlinien empfohlen, darunter Prettier und standard.
const a = 1
;(1).toString()
Weitere Ratschlge zum Umgang mit ASI finden Sie in der Referenzsektion.
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-grouping-operator |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |