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 Geräten und in vielen Browserversionen. Sie ist seit Juli 2020 browserübergreifend verfügbar.
Der Optional Chaining (?.)-Operator greift auf eine Eigenschaft eines Objekts zu oder ruft eine Funktion auf. Wenn das Objekt, auf das zugegriffen wird, oder die Funktion, die mit diesem Operator aufgerufen wird, undefined oder null ist, wird der Ausdruck kurzgeschlossen und ergibt undefined anstelle eines Fehlers.
Der ?.-Operator ist wie der .-Chaining-Operator, mit dem Unterschied, dass anstatt eines Fehlers, wenn ein Verweis nullish (null oder undefined) ist, der Ausdruck mit einem Rückgabewert von undefined kurzgeschlossen wird. Bei Funktionsaufrufen wird undefined zurückgegeben, wenn die angegebene Funktion nicht existiert.
Dies führt zu kürzeren und einfacheren Ausdrücken beim Zugriff auf verkettete Eigenschaften, wenn die Möglichkeit besteht, dass ein Verweis fehlen könnte. Es kann auch hilfreich sein, den Inhalt eines Objekts zu untersuchen, wenn keine Garantie besteht, welche Eigenschaften erforderlich sind.
Betrachten Sie zum Beispiel ein Objekt obj mit einer verschachtelten Struktur. Ohne Optional Chaining erfordert das Nachschlagen einer tief verschachtelten Untereigenschaft die Validierung der zwischengeschalteten Verweise wie folgt:
Der Wert von obj.first wird bestätigt, nicht-null (und nicht-undefined) zu sein, bevor der Wert von obj.first.second aufgerufen wird. Dies verhindert den Fehler, der entstehen würde, wenn Sie obj.first.second direkt ohne Prüfung von obj.first aufrufen würden.
Dies ist ein idiomatisches Muster in JavaScript, wird jedoch langatmig, wenn die Kette lang ist, und es ist nicht sicher. Zum Beispiel, wenn obj.first ein Falsy-Wert ist, der nicht null oder undefined ist, wie 0, würde es immer noch zum Kurzschluss kommen und nestedProp würde zu 0, was möglicherweise nicht wünschenswert ist.
Mit dem Optional Chaining Operator (?.) müssen Sie jedoch nicht explizit testen und darauf basierend auf den Zustand von obj.first verzichten, bevor Sie versuchen, auf obj.first.second zuzugreifen:
Durch die Verwendung des ?.-Operators anstelle von nur . weiß JavaScript, dass es implizit prüfen soll, ob obj.first nicht null oder undefined ist, bevor versucht wird, auf obj.first.second zuzugreifen. Wenn obj.first null oder undefined ist, wird der Ausdruck automatisch kurzgeschlossen und undefined zurückgegeben.
Dies ist gleichbedeutend mit dem Folgenden, außer dass die temporäre Variable in der Tat nicht erstellt wird:
Optional Chaining kann nicht auf einem nicht deklarierten Stammobjekt verwendet werden, aber es kann mit einem Stammobjekt verwendet werden, dessen Wert undefined ist.
Sie können Optional Chaining verwenden, wenn versucht wird, eine Methode aufzurufen, die möglicherweise nicht existiert. Dies kann hilfreich sein, zum Beispiel wenn Sie eine API verwenden, bei der eine Methode möglicherweise nicht verfügbar ist, entweder wegen des Alters der Implementierung oder weil eine Funktion nicht auf dem Gerät des Benutzers verfügbar ist.
Die Verwendung von Optional Chaining mit Funktionsaufrufen führt dazu, dass der Ausdruck automatisch undefined zurückgibt, anstatt eine Ausnahme auszulösen, wenn die Methode nicht gefunden wird:
Wenn jedoch eine Eigenschaft mit einem solchen Namen existiert, die keine Funktion ist, wird die Verwendung von ?. immer noch eine TypeError-Ausnahme auslösen: "someInterface.customMethod is not a function".
Hinweis: Wenn someInterface selbst null oder undefined ist, wird immer noch eine TypeError-Ausnahme ausgelöst ("someInterface is null"). Wenn Sie erwarten, dass someInterface selbst null oder undefined sein könnte, müssen Sie ?. auch an dieser Position verwenden: someInterface?.customMethod?.().
eval?.() ist der kürzeste Weg, um in den indirect eval-Modus einzutreten.
Sie können den Optional Chaining Operator auch mit der Bracket-Notation verwenden, die es ermöglicht, einen Ausdruck als Eigenschaftsnamen zu übergeben:
Dies ist besonders nützlich für Arrays, da Array-Indizes mit eckigen Klammern zugegriffen werden müssen.
Es ist ungültig, zu versuchen, das Ergebnis eines Optional-Chaining-Ausdrucks zuzuweisen:
Vorlagenliteraltags können nicht eine Optionale Kette sein (siehe SyntaxError: tagged template cannot be used with optional chain):
Der Konstruktor von new-Ausdrücken kann nicht eine Optionale Kette sein (siehe SyntaxError: new keyword cannot be used with an optional chain):
Bei der Verwendung von Optional Chaining mit Ausdrücken, wenn der linke Operand null oder undefined ist, wird der Ausdruck nicht ausgewertet. Zum Beispiel:
Nachfolgende Eigenschaftszugriffe werden ebenfalls nicht ausgewertet.
Dies entspricht:
Dieses Kurzschlussverhalten tritt jedoch nur innerhalb einer durchgehenden "Kette" von Eigenschaftszugriffen auf. Wenn Sie einen Teil der Kette gruppieren, werden nachfolgende Eigenschaftszugriffe dennoch ausgewertet.
Dies entspricht:
Außer dass die temp-Variable nicht erstellt wird.
Dieses Beispiel sucht den Wert der name-Eigenschaft für das Mitglied CSS in einer Map, wenn es kein solches Mitglied gibt. Das Ergebnis ist daher undefined.
Wenn Sie Rückrufe verwenden oder Methoden von einem Objekt mit einem Destructuring-Muster abrufen, haben Sie möglicherweise nicht existierende Werte, die Sie nicht als Funktionen aufrufen können, es sei denn, Sie haben deren Existenz getestet. Mit ?. können Sie diesen zusätzlichen Test vermeiden:
Mit verschachtelten Strukturen ist es möglich, Optional Chaining mehrmals zu verwenden:
Der Nullish Coalescing Operator kann nach dem Optional Chaining verwendet werden, um einen Standardwert zu erstellen, wenn keiner gefunden wurde:
| ECMAScript® 2027 Language Specification # prod-OptionalExpression |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.