Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Ausdrücke und Operatoren
Dieses Kapitel dokumentiert alle JavaScript-Sprachoperatoren, Ausdrücke und Schlüsselwörter.
Ausdrücke und Operatoren nach Kategorie
Für ein alphabetisches Verzeichnis siehe die Seitenleiste links.
Primäre Ausdrücke
Grundlegende Schlüsselwörter und allgemeine Ausdrücke in JavaScript. Diese Ausdrücke haben die höchste Priorität (höher als Operatoren).
this-
Das
this-Schlüsselwort bezieht sich auf eine spezielle Eigenschaft eines Ausführungskontextes. - Literals
-
Grundlegende
null-, Boolean-, Zahlen- und String-Literale. []-
Array-Initialisierer/Literalsyntax.
{}-
Objekt-Initialisierer/Literalsyntax.
function-
Das
function-Schlüsselwort definiert einen Funktionsausdruck. class-
Das
class-Schlüsselwort definiert einen Klassenausdruck. function*-
Das
function*-Schlüsselwort definiert einen Generator-Funktionsausdruck. async function-
Das
async functiondefiniert einen asynchronen Funktionsausdruck. async function*-
Die
async function*-Schlüsselwörter definieren einen asynchronen Generator-Funktionsausdruck. /ab+c/i-
Reguläre Ausdrücke Literalsyntax.
`string`-
Template-Literalsyntax.
( )-
Gruppierungsoperator.
Linke Ausdrücke
Linke Werte sind das Ziel einer Zuweisung.
- Property accessors
-
Mitgliedsoperatoren ermöglichen den Zugriff auf eine Eigenschaft oder Methode eines Objekts (
object.propertyundobject["property"]). ?.-
Der operatorische Verkettungsoperator gibt
undefinedzurück, anstatt einen Fehler zu verursachen, wenn eine Referenz nullish (nulloderundefined) ist. new-
Der
new-Operator erstellt eine Instanz eines Konstruktors. new.target-
In Konstruktoren bezieht sich
new.targetauf den Konstruktor, der durchnewaufgerufen wurde. import.meta-
Ein Objekt, das kontextspezifische Metadaten einem JavaScript-Modul zur Verfügung stellt.
super-
Das
super-Schlüsselwort ruft den Elternkonstruktor auf oder ermöglicht den Zugriff auf Eigenschaften des Elternobjekts. import()-
Die
import()-Syntax ermöglicht das asynchrone und dynamische Laden eines Moduls in eine potenziell nicht modulare Umgebung.
Inkrement- und Dekrement-Operatoren
Postfix/Präfix-Inkrement und Postfix/Präfix-Dekrement-Operatoren.
Unäre Operatoren
Eine unäre Operation ist eine Operation mit nur einem Operanden.
delete-
Der
delete-Operator löscht eine Eigenschaft eines Objekts. void-
Der
void-Operator wertet einen Ausdruck aus und verwirft dessen Rückgabewert. typeof-
Der
typeof-Operator bestimmt den Typ eines gegebenen Objekts. +-
Der unäre Plus-Operator konvertiert seinen Operanden in den Zahlentyp.
--
Der unäre Negationsoperator konvertiert seinen Operanden in den Zahlentyp und negiert ihn dann.
~-
Bitweiser NICHT-Operator.
!-
Logischer NICHT-Operator.
await-
Pausiert und setzt eine asynchrone Funktion fort und wartet auf die Erfüllung/Ablehnung des Versprechens.
Arithmetische Operatoren
Arithmetische Operatoren nehmen numerische Werte (entweder Literale oder Variablen) als ihre Operanden und geben einen einzelnen numerischen Wert zurück.
Relationsoperatoren
Ein Vergleichsoperator vergleicht seine Operanden und gibt einen booleschen Wert basierend darauf zurück, ob der Vergleich wahr ist.
<(Weniger als)-
Weniger-als-Operator.
>(Größer als)-
Größer-als-Operator.
<=-
Kleiner-gleich-Operator.
>=-
Größer-gleich-Operator.
instanceof-
Der
instanceof-Operator bestimmt, ob ein Objekt eine Instanz eines anderen Objekts ist. in-
Der
in-Operator bestimmt, ob ein Objekt eine gegebene Eigenschaft hat.
Hinweis:
=> ist kein Operator, sondern die Notation für Arrow Functions.
Gleichheitsoperatoren
Das Ergebnis der Auswertung eines Gleichheitsoperators ist immer vom Typ boolean basierend darauf, ob der Vergleich wahr ist.
Bitweise Schiebeoperatoren
Operationen, um alle Bits des Operanden zu verschieben.
Binäre bitweise Operatoren
Bitweise Operatoren behandeln ihre Operanden als Menge von 32 Bits (Nullen und Einsen) und geben Standard-JavaScript-Numerische Werte zurück.
Binäre logische Operatoren
Logische Operatoren implementieren boolesche (logische) Werte und haben ein Kurzschlussverhalten.
Bedingungsoperator (ternär)
(condition ? ifTrue : ifFalse)-
Der bedingte Operator gibt basierend auf dem logischen Wert der Bedingung einen von zwei Werten zurück.
Zuweisungsoperatoren
Ein Zuweisungsoperator weist den Wert seines rechten Operanden seinem linken Operanden zu.
=-
Zuweisungsoperator.
*=-
Multiplikationszuweisung.
/=-
Divisionszuweisung.
%=-
Restzuweisung.
+=-
Additionszuweisung.
-=-
Subtraktionszuweisung.
<<=-
Linksverschiebungszuweisung.
>>=-
Rechtsverschiebungszuweisung.
>>>=-
Unsigned Rechtsverschiebungszuweisung.
&=-
Bitweise UND Zuweisung.
^=-
Bitweise XOR Zuweisung.
|=-
Bitweise OR Zuweisung.
**=-
Exponentiationszuweisung.
&&=-
Logische UND Zuweisung.
||=-
Logische OR Zuweisung.
??=-
Nullish Coalescing Zuweisung.
[a, b] = arr,{ a, b } = obj-
Destrukturierung ermöglicht es Ihnen, die Eigenschaften eines Arrays oder Objekts Variablen mit einer Syntax zuzuweisen, die Array- oder Objektliternal ähnelt.
Yield-Operatoren
Spread-Syntax
...obj-
Die Spread-Syntax erlaubt es, ein iterierbares Objekt, wie ein Array oder ein String, an Stellen zu erweitern, an denen null oder mehr Argumente (für Funktionsaufrufe) oder Elemente (für Arrayliterale) erwartet werden. In einem Objektliteral enumeriert die Spread-Syntax die Eigenschaften eines Objekts und fügt die Schlüssel-Wert-Paar dem zu erstellenden Objekt hinzu.
Komma-Operator
,-
Der Komma-Operator ermöglicht es, mehrere Ausdrücke in einer einzigen Anweisung auszuführen und gibt das Ergebnis des letzten Ausdrucks zurück.
Was sind Operatoren?
Wie die Sektion Was sind Anweisungen, Deklarationen und Ausdrücke? erklärt, ist ein Ausdruck ein grundlegender Baustein, der zu einem Wert ausgewertet wird. Anweisungen, Deklarationen und Ausdrücke können alle bestimmte Slots definieren, in denen Ausdrücke akzeptiert werden. Wo ein Ausdruck Slots für weitere verschachtelte Ausdrücke enthält, werden die Teile, die keine Slots sind, als Operatoren bezeichnet.
Zum Beispiel ist die Syntax für einen Additionsausdruck expression + expression (wenn Sie die Spezifikation lesen, werden die Operanden AdditiveExpression und MultiplicativeExpression genannt, die beide Untergruppen von Expression sind, aber das ist der Mechanismus der Spezifikation zur Definition von Priorität und Assoziativität, der für unsere Zwecke irrelevant ist). Abgesehen von den beiden Ausdrucksslots führt der Code nur + ein: den Additionsoperator. Ähnlich ist die Syntax für einen yield-Ausdruck yield expression, sodass yield als der Operator bekannt ist. Mit anderen Worten, jeder Operator entspricht einem Ausdruck.
MDN betrachtet auch Ausdrücke ohne Slots wie null als Operatoren gemäß der obigen Definition, obwohl wir sie fast immer nur als "Syntax" oder "Ausdruck" bezeichnen.
Ein Ausdruck muss keine feste Anzahl an Slots haben. Zum Beispiel kann der Arrayliteral-Ausdruck [expression, expression, expression] eine beliebige Anzahl an Ausdrucksslots haben. Der [,,]-Teil könnte als "Operator" bezeichnet werden. MDN vermeidet diese Nutzung, aber Sie können sie in funktionalen Programmiersprachen wie Haskell sehen.
Die Definition von Operatoren wird bei bestimmten anderen Code-Entitäten unschärfer: Was ist, wenn ein Ausdruck einen Slot hat, der kein Ausdruck ist, oder eine Code-Entität kombiniert mit einem Ausdruck macht keinen Ausdruck aus? Bezeichnen wir diese Code-Entität immer noch als Operator?
- Im Optional Chaining-Ausdruck
foo?.baristfooein Ausdruck, aberbarmuss ein Bezeichner sein und wird nicht zu einem Wert ausgewertet. Betrachten wir?.immer noch als Operator? - Im Arrow Function-Ausdruck
arg => bodykönntebodyein Ausdruck sein (obwohl es auch ein Blockkörper sein kann), undargist nur eine Argumentliste. Betrachten wir=>immer noch als Operator? - In der Spread-Syntax
...fooistfooein Ausdruck, aber das Ganze ist kein Ausdruck, weil es nicht zu einem Wert ausgewertet wird—es macht nur in bestimmten anderen Ausdrücken wie Funktionsaufrufen, Array- und Objektliteralen Sinn. Betrachten wir...immer noch als Operator?
Der Begriff "Operator" ist in JavaScript nicht präzise definiert, daher gibt MDN keine definitive Antwort. Unser Ansatz ist, all diese Konstrukte unter "Operatoren" zu gruppieren, aber sie formal nicht als Operatoren zu bezeichnen. Viele nützliche Konzepte über Operatoren, wie Priorität, gelten dennoch für sie, unabhängig von ihrer genauen Natur.
