Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 84

4.7.4Vorrang von Operatoren

Оглавление

Die in Tabelle 4-1 aufgeführten Operatoren sind nach absteigendem Vorrang, auch Präzedenz genannt, angeordnet, und zwischen den verschiedenen Vorrangstufen sind Trennlinien eingefügt. Der Operatorvorrang steuert, in welcher Abfolge Operationen ausgeführt werden. Operatoren mit höherem Vorrang (diejenigen, die weiter oben in der Tabelle stehen) werden vor denen mit niedrigerem Vorrang (denjenigen, die weiter unten in der Tabelle stehen) ausgeführt.

Betrachten Sie den folgenden Ausdruck:

w = x + y*z;

Der Multiplikationsoperator * hat einen höheren Vorrang als der Additionsoperator +, die Multiplikation wird also vor der Addition ausgeführt (und hat damit auch umgangssprachlich »Vorrang«). Der Zuweisungsoperator = hat schließlich den geringsten Vorrang: Die Zuweisung wird also erst ausgeführt, nachdem alle Operationen auf der rechten Seite durchgeführt wurden.

Der Operatorvorrang kann durch den expliziten Einsatz von Klammern überschrieben werden. Ändern Sie den Ausdruck folgendermaßen, wenn Sie erzwingen wollen, dass die Addition zuerst ausgeführt wird:

w = (x + y)*z;

Beachten Sie bitte, dass Eigenschaftszugriffs- und Aufrufausdrücke höheren Vorrang haben als alle in Tabelle 4-1 aufgeführten Operatoren. Betrachten Sie diesen Ausdruck:

// my ist ein Objekt mit einer Eigenschaft namens functions, deren Wert ein

// Array von Funktionen ist. Wir rufen die Funktion mit dem Index x auf,

// übergeben ihr das Argument y und fragen dann nach dem Typ des zurückgegebenen

// Werts.

typeof my.functions[x](y)

Obwohl typeof einer der Operatoren mit der höchsten Priorität ist, wird die entsprechende Operation auf dem Ergebnis von Eigenschaftszugriff, Array-Index und Funktionsaufruf ausgeführt, die alle eine höhere Priorität als Operatoren haben.

Sollten Sie sich nicht sicher sein, welchen Vorrang die von Ihnen verwendeten Operatoren haben, ist es empfehlenswert, die Auswertung explizit durch die Einführung von Klammern zu steuern. Folgende Regeln sollten Sie sich auf alle Fälle merken: Multiplikation und Division werden vor Addition und Subtraktion ausgeführt; Zuweisungen haben sehr geringen Vorrang und werden fast immer zuletzt ausgeführt.

Wenn neue Operatoren zu JavaScript hinzugefügt werden, passen sie nicht immer nahtlos in die vorhandene Vorrangordnung. Der ??-Operator (siehe 4.13.2) wird in der Tabelle mit niedrigerem Vorrang als || und && dargestellt, aber tatsächlich ist sein Vorrang relativ zu diesen Operatoren nicht definiert, und ES2020 verlangt die explizite Verwendung von Klammern, wenn man ?? zusammen mit || oder && einsetzen will. In ähnlicher Weise hat der neue Exponentialoperator ** keine genau definierte Präzedenz gegenüber dem unären Negationsoperator, und Sie müssen Klammern verwenden, wenn Sie die Negation mit der Potenzierung kombinieren.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх