Ausdrücke und Operatoren
Dieses Kapitel dokumentiert alle JavaScript-Sprachoperatoren, -ausdrücke und -Schlüsselwörter.
Ausdrücke und Operatoren nach Kategorie
Eine alphabetische Auflistung finden Sie in der Seitenleiste links.
Primäre Ausdrücke
Grundlegende Schlüsselwörter und allgemeine Ausdrücke in JavaScript. Diese Ausdrücke haben die höchste Präzedenz (höher als Operatoren).
this-
Das Schlüsselwort
thisverweist auf eine spezielle Eigenschaft eines Ausführungskontexts. - Literale
-
Grundlegende
null-, Boolean-, Zahlen- und String-Literale. []-
Array-Initialisierer-/Literal-Syntax.
{}-
Objekt-Initialisierer-/Literal-Syntax.
function-
Das Schlüsselwort
functiondefiniert einen Funktionsausdruck. class-
Das Schlüsselwort
classdefiniert einen Klassenausdruck. function*-
Das Schlüsselwort
function*definiert einen Generatorfunktionsausdruck. async function-
async functiondefiniert einen asynchronen Funktionsausdruck. async function*-
Die Schlüsselwörter
async function*definieren einen asynchronen Generatorfunktionsausdruck. /ab+c/i-
Syntax für reguläre Ausdrucksliterale.
`string`-
Template-Literal-Syntax.
( )-
Gruppierungsoperator.
Ausdrücke auf der linken Seite
Linke Werte sind das Ziel einer Zuweisung.
- Property accessors
-
Member-Operatoren ermöglichen den Zugriff auf eine Eigenschaft oder Methode eines Objekts (
object.propertyundobject["property"]). ?.-
Der optionale Verkettungsoperator gibt
undefinedzurück, statt einen Fehler zu verursachen, wenn eine Referenz nullish ist (nulloderundefined). new-
Der Operator
newerstellt eine Instanz eines Konstruktors. new.target-
In Konstruktoren verweist
new.targetauf den Konstruktor, der durchnewaufgerufen wurde. import.meta-
Ein Objekt, das kontextspezifische Metadaten für ein JavaScript-Modul verfügbar macht.
super-
Das Schlüsselwort
superruft den übergeordneten Konstruktor auf oder ermöglicht den Zugriff auf Eigenschaften des übergeordneten Objekts. import()-
Die Syntax
import()ermöglicht das asynchrone und dynamische Laden eines Moduls in eine potenziell nicht modulare Umgebung. import.defer()-
Die Syntax
import.defer()lädt ein Modul dynamisch und verschiebt die synchrone Auswertung, bis auf die Eigenschaften des zurückgegebenen Namespace zugegriffen wird. import.source()-
Die Syntax
import.source()führt zu einem Objekt, das den kompilierten Quellcode des Moduls darstellt, ohne dessen Abhängigkeiten zu laden, es zu verknüpfen oder es auszuwerten.
Inkrement und Dekrement
Postfix-/Präfix-Inkrement- und Postfix-/Präfix-Dekrementoperatoren.
Unäre Operatoren
Eine unäre Operation ist eine Operation mit nur einem Operanden.
delete-
Der Operator
deletelöscht eine Eigenschaft aus einem Objekt. void-
Der Operator
voidwertet einen Ausdruck aus und verwirft dessen Rückgabewert. typeof-
Der Operator
typeofbestimmt den Typ eines gegebenen Objekts. +-
Der unäre Plusoperator konvertiert seinen Operanden in den Typ Number.
--
Der unäre Negationsoperator konvertiert seinen Operanden in den Typ Number und negiert ihn anschließend.
~-
Bitweiser NOT-Operator.
!-
Logischer NOT-Operator.
await-
Hält eine asynchrone Funktion an und setzt sie fort und wartet auf die Erfüllung/Ablehnung des Promise.
Arithmetische Operatoren
Arithmetische Operatoren nehmen numerische Werte (entweder Literale oder Variablen) als ihre Operanden und geben einen einzelnen numerischen Wert zurück.
Vergleichsoperatoren
Ein Vergleichsoperator vergleicht seine Operanden und gibt abhängig davon, ob der Vergleich wahr ist, einen Boolean-Wert zurück.
<(Kleiner als)-
Kleiner-als-Operator.
>(Größer als)-
Größer-als-Operator.
<=-
Kleiner-gleich-Operator.
>=-
Größer-gleich-Operator.
instanceof-
Der Operator
instanceofbestimmt, ob ein Objekt eine Instanz eines anderen Objekts ist. in-
Der Operator
inbestimmt, ob ein Objekt eine bestimmte Eigenschaft hat.
Hinweis:
=> ist kein Operator, sondern die Notation für Pfeilfunktionen.
Gleichheitsoperatoren
Das Ergebnis der Auswertung eines Gleichheitsoperators hat immer den Typ Boolean, abhängig davon, ob der Vergleich wahr ist.
Bitweise Schiebeoperatoren
Operationen zum Verschieben aller Bits des Operanden.
Binäre bitweise Operatoren
Bitweise Operatoren behandeln ihre Operanden als Satz von 32 Bits (Nullen und Einsen) und geben standardmäßige numerische JavaScript-Werte zurück.
Binäre logische Operatoren
Logische Operatoren implementieren Boolean-Werte (logische Werte) und weisen ein Kurzschlussverhalten auf.
Bedingungsoperator (ternär)
(condition ? ifTrue : ifFalse)-
Der Bedingungsoperator gibt abhängig vom logischen Wert der Bedingung einen von zwei Werten zurück.
Zuweisungsoperatoren
Ein Zuweisungsoperator weist seinem linken Operanden basierend auf dem Wert seines rechten Operanden einen Wert zu.
=-
Zuweisungsoperator.
*=-
Multiplikationszuweisung.
/=-
Divisionszuweisung.
%=-
Restzuweisung.
+=-
Additionszuweisung.
-=-
Subtraktionszuweisung.
<<=-
Linksverschiebungszuweisung.
>>=-
Rechtsverschiebungszuweisung.
>>>=-
Vorzeichenlose Rechtsverschiebungszuweisung.
&=-
Bitweise AND-Zuweisung.
^=-
Bitweise XOR-Zuweisung.
|=-
Bitweise OR-Zuweisung.
**=-
Potenzierungszuweisung.
&&=-
Logische AND-Zuweisung.
||=-
Logische OR-Zuweisung.
??=-
Nullish-Coalescing-Zuweisung.
[a, b] = arr,{ a, b } = obj-
Destructuring ermöglicht es Ihnen, die Eigenschaften eines Arrays oder Objekts mithilfe einer Syntax, die Array- oder Objektliteralen ähnelt, Variablen zuzuweisen.
Yield-Operatoren
Spread-Syntax
...obj-
Die Spread-Syntax ermöglicht es, ein iterierbares Objekt wie ein Array oder einen String an Stellen zu erweitern, an denen null oder mehr Argumente (für Funktionsaufrufe) oder Elemente (für Array-Literale) erwartet werden. In einem Objektliteral zählt die Spread-Syntax die Eigenschaften eines Objekts auf und fügt die Schlüssel-Wert-Paare dem erstellten Objekt hinzu.
Kommaoperator
,-
Der Kommaoperator ermöglicht die Auswertung mehrerer Ausdrücke in einer einzelnen Anweisung und gibt das Ergebnis des letzten Ausdrucks zurück.
Was sind Operatoren?
Wie im Abschnitt Was sind Anweisungen, Deklarationen und Ausdrücke? erläutert wird, ist ein Ausdruck ein grundlegender Baustein, der zu einem Wert ausgewertet wird. Anweisungen, Deklarationen und Ausdrücke können jeweils bestimmte Stellen definieren, an denen Ausdrücke akzeptiert werden. Wenn ein Ausdruck Stellen für weitere verschachtelte Ausdrücke enthält, werden die Teile, die keine solchen Stellen sind, als Operatoren bezeichnet.
Beispielsweise lautet die Syntax für einen Additions-Ausdruck expression + expression (wenn Sie die Spezifikation lesen, werden die Operanden AdditiveExpression und MultiplicativeExpression genannt, die beide Teilmengen von Expression sind; dies ist jedoch der Mechanismus der Spezifikation zur Definition von Präzedenz und Assoziativität und für unsere Zwecke nicht relevant). Abgesehen von den beiden Ausdrucksstellen ist die eingeführte Codeeinheit lediglich +: der Additionsoperator. Ebenso lautet die Syntax für einen yield-Ausdruck yield expression, daher wird yield als Operator bezeichnet. Mit anderen Worten: Jeder Operator entspricht einem Ausdruck.
MDN betrachtet gemäß der obigen Definition auch Ausdrücke ohne Stellen wie null als Operatoren, obwohl wir sie fast immer einfach als „Syntax“ oder „Ausdruck“ bezeichnen.
Ein Ausdruck muss keine feste Anzahl von Stellen annehmen. Beispielsweise kann der Array-Literal-Ausdruck [expression, expression, expression] eine beliebige Anzahl von Ausdrucksstellen annehmen. Der Teil [,,] könnte als „Operator“ bezeichnet werden. MDN vermeidet diese Verwendung, aber Sie könnten ihr in funktionalen Programmiersprachen wie Haskell begegnen.
Die Definition von Operatoren wird bei bestimmten anderen Codeeinheiten unschärfer: Was ist, wenn ein Ausdruck eine Stelle enthält, die kein Ausdruck ist, oder wenn eine mit einem Ausdruck kombinierte Codeeinheit keinen Ausdruck ergibt? Bezeichnen wir diese Codeeinheit dann noch als Operator?
- Im Ausdruck für optionale Verkettung
foo?.baristfooein Ausdruck, aberbarmuss ein Bezeichner sein und wird nicht zu einem Wert ausgewertet. Betrachten wir?.weiterhin als Operator? - Im Ausdruck für Pfeilfunktionen
arg => bodykannbodyein Ausdruck sein (obwohl es auch ein Blockrumpf sein kann), undargist lediglich eine Argumentliste. Betrachten wir=>weiterhin als Operator? - In der Spread-Syntax
...fooistfooein Ausdruck, aber das Ganze ist kein Ausdruck, da es nicht zu einem Wert ausgewertet wird – es ergibt nur in bestimmten anderen Ausdrücken wie Funktionsaufrufen, Array-Literalen und Objektliteralen Sinn. Betrachten wir...weiterhin als Operator?
Der Begriff „Operator“ ist in JavaScript nicht präzise definiert, daher gibt MDN keine endgültige Antwort. Unser Ansatz besteht darin, all diese Konstrukte unter „Operatoren“ zusammenzufassen, aber zu vermeiden, sie formell als Operatoren zu bezeichnen. Viele nützliche Konzepte zu Operatoren, etwa die Präzedenz, gelten unabhängig von ihrer genauen Natur weiterhin für sie.