Ausdrücke und Operatoren - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 function definiert 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.property und object["property"]).

?.

Der operatorische Verkettungsoperator gibt undefined zurück, anstatt einen Fehler zu verursachen, wenn eine Referenz nullish (null oder undefined) ist.

new

Der new-Operator erstellt eine Instanz eines Konstruktors.

new.target

In Konstruktoren bezieht sich new.target auf den Konstruktor, der durch new aufgerufen 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.

A++

Postfix-Inkrement-Operator.

A--

Postfix-Dekrement-Operator.

++A

Präfix-Inkrement-Operator.

--A

Präfix-Dekrement-Operator.

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.

**

Exponentiationsoperator.

*

Multiplikationsoperator.

/

Divisionsoperator.

%

Restoperator.

+ (Plus)

Additionsoperator.

-

Subtraktionsoperator.

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.

==

Gleichheitsoperator.

!=

Ungleichheitsoperator.

===

Strenger Gleichheitsoperator.

!==

Strenger Ungleichheitsoperator.

Bitweise Schiebeoperatoren

Operationen, um alle Bits des Operanden zu verschieben.

<<

Bitweiser Linksverschiebungsoperator.

>>

Bitweiser Rechtsverschiebungsoperator.

>>>

Bitweiser unsignierter Rechtsverschiebungsoperator.

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.

&

Bitweises UND.

|

Bitweises ODER.

^

Bitweises XOR.

Binäre logische Operatoren

Logische Operatoren implementieren boolesche (logische) Werte und haben ein Kurzschlussverhalten.

&&

Logisches UND.

||

Logisches ODER.

??

Nullish Coalescing Operator.

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

yield

Pausiert und setzt eine Generatorfunktion fort.

yield*

Delegiert an eine andere Generatorfunktion oder ein iterierbares Objekt.

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?.bar ist foo ein Ausdruck, aber bar muss ein Bezeichner sein und wird nicht zu einem Wert ausgewertet. Betrachten wir ?. immer noch als Operator?
  • Im Arrow Function-Ausdruck arg => body könnte body ein Ausdruck sein (obwohl es auch ein Blockkörper sein kann), und arg ist nur eine Argumentliste. Betrachten wir => immer noch als Operator?
  • In der Spread-Syntax ...foo ist foo ein 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.

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification>
# sec-assignment-operators>
ECMAScript® 2027 Language Specification>
# sec-equality-operators>
ECMAScript® 2027 Language Specification>
# sec-generator-function-definitions-runtime-semantics-evaluation>
ECMAScript® 2027 Language Specification>
# sec-class-definitions>
ECMAScript® 2027 Language Specification>
# sec-async-function-definitions>
ECMAScript® 2027 Language Specification>
# sec-void-operator>
ECMAScript® 2027 Language Specification>
# sec-conditional-operator>
ECMAScript® 2027 Language Specification>
# sec-destructuring-assignment>
ECMAScript® 2027 Language Specification>
# sec-property-accessors>
ECMAScript® 2027 Language Specification>
# sec-subtraction-operator-minus>
ECMAScript® 2027 Language Specification>
# prod-LogicalORExpression>
ECMAScript® 2027 Language Specification>
# prod-PropertyDefinition>
ECMAScript® 2027 Language Specification>
# prod-AssignmentRestElement>
ECMAScript® 2027 Language Specification>
# sec-import-calls>
ECMAScript® 2027 Language Specification>
# sec-multiplicative-operators>
ECMAScript® 2027 Language Specification>
# sec-super-keyword>
ECMAScript® 2027 Language Specification>
# prod-CoalesceExpression>
ECMAScript® 2027 Language Specification>
# sec-postfix-decrement-operator>
ECMAScript® 2027 Language Specification>
# prod-LogicalANDExpression>
ECMAScript® 2027 Language Specification>
# prod-OptionalExpression>
ECMAScript® 2027 Language Specification>
# sec-addition-operator-plus>
ECMAScript® 2027 Language Specification>
# sec-async-generator-function-definitions>
ECMAScript® 2027 Language Specification>
# sec-relational-operators>
ECMAScript® 2027 Language Specification>
# sec-destructuring-binding-patterns>
ECMAScript® 2027 Language Specification>
# prod-FormalParameters>
ECMAScript® 2027 Language Specification>
# sec-grouping-operator>
ECMAScript® 2027 Language Specification>
# prod-BitwiseORExpression>
ECMAScript® 2027 Language Specification>
# sec-exp-operator>
ECMAScript® 2027 Language Specification>
# sec-function-definitions>
ECMAScript® 2027 Language Specification>
# sec-unsigned-right-shift-operator>
ECMAScript® 2027 Language Specification>
# sec-postfix-increment-operator>
ECMAScript® 2027 Language Specification>
# prod-SpreadElement>
ECMAScript® 2027 Language Specification>
# prod-ImportMeta>
ECMAScript® 2027 Language Specification>
# sec-logical-not-operator>
ECMAScript® 2027 Language Specification>
# sec-generator-function-definitions>
ECMAScript® 2027 Language Specification>
# sec-comma-operator>
ECMAScript® 2027 Language Specification>
# sec-typeof-operator>
ECMAScript® 2027 Language Specification>
# sec-delete-operator>
ECMAScript® 2027 Language Specification>
# prod-YieldExpression>
ECMAScript® 2027 Language Specification>
# sec-object-initializer>
ECMAScript® 2027 Language Specification>
# sec-new-operator>
ECMAScript® 2027 Language Specification>
# prod-ArgumentList>
ECMAScript® 2027 Language Specification>
# sec-this-keyword>
ECMAScript® 2027 Language Specification>
# prod-BitwiseXORExpression>
ECMAScript® 2027 Language Specification>
# prod-BitwiseANDExpression>
ECMAScript® 2027 Language Specification>
# sec-bitwise-not-operator>
ECMAScript® 2027 Language Specification>
# prod-AssignmentRestProperty>
ECMAScript® 2027 Language Specification>
# sec-unary-minus-operator>
ECMAScript® 2027 Language Specification>
# sec-unary-plus-operator>
ECMAScript® 2027 Language Specification>
# sec-signed-right-shift-operator>
ECMAScript® 2027 Language Specification>
# prod-ComputedPropertyName>
ECMAScript® 2027 Language Specification>
# sec-null-value>
ECMAScript® 2027 Language Specification>
# sec-left-shift-operator>
ECMAScript® 2027 Language Specification>
# prod-MethodDefinition>
ECMAScript® 2027 Language Specification>
# sec-built-in-function-objects>
HTML>
# import-meta-resolve>
HTML>
# integration-with-the-javascript-module-system>

Browser-Kompatibilität

Siehe auch