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 August 2016 browserübergreifend verfügbar.
Die Destructuring-Syntax ist eine JavaScript-Syntax, die es ermöglicht, Werte aus Arrays oder Eigenschaften von Objekten in separate Variablen zu entpacken. Sie kann an Orten verwendet werden, die Daten empfangen (wie die linke Seite einer Zuweisung oder überall dort, wo neue Bezeichnerbindungen erstellt werden).
Die Objekt- und Array-Literalausdrücke bieten eine einfache Möglichkeit, ad hoc-Datenpakete zu erstellen.
Das Destructuring verwendet eine ähnliche Syntax, jedoch auf der linken Seite der Zuweisung. Es führt die Umkehrung einer Array-Deklaration durch, indem jedes Element in der Sammlung als separate Variable deklariert wird.
Was Objekte betrifft, vergleichen Sie die beiden Paare von Zeilen unten und sehen Sie, wie es innerhalb jedes Paares eine direkte Entsprechung gibt.
Diese Fähigkeit ist ähnlich wie Funktionen, die in Sprachen wie Perl und Python vorhanden sind.
Für spezifische Funktionen der Array- oder Objekt-Destructuring, siehe die einzelnen Beispiele unten.
Sowohl für Objekt- als auch für Array-Destructuring gibt es zwei Arten von Destructuring-Mustern: Bindungsmuster und Zuweisungsmuster mit leicht unterschiedlichen Syntaxen.
In Bindungsmustern beginnt das Muster mit einem Deklarationsschlüsselwort (var, let oder const). Dann muss jede einzelne Eigenschaft entweder an eine Variable gebunden oder weiter zerlegt werden.
Alle Variablen teilen dieselbe Deklaration, daher müssen Sie möglicherweise zweimal destructuren — einmal mit let, einmal mit const —, wenn Sie möchten, dass einige Variablen neu zuweisbar, andere jedoch schreibgeschützt sind.
In vielen anderen Syntaxen, bei denen die Sprache eine Variable für Sie bindet, können Sie ein Bindungs-Destructuring-Muster verwenden. Dazu gehören:
In Zuweisungsmustern beginnt das Muster nicht mit einem Schlüsselwort. Jede zerlegte Eigenschaft wird einem Ziel zugeordnet — welches entweder vorher mit var oder let deklariert wurde oder eine Eigenschaft eines anderen Objekts ist — im Allgemeinen alles, was auf der linken Seite eines Zuweisungsausdrucks erscheinen kann.
Hinweis: Die Klammern ( ... ) um die Zuweisung sind erforderlich, wenn Sie Objektliteral-Destructuring ohne Deklaration verwenden.
{ a, b } = { a: 1, b: 2 } ist keine gültige eigenständige Syntax, da { a, b } auf der linken Seite als Block und nicht als Objektliteral gemäß den Regeln von Ausdrucksstatements betrachtet wird. ({ a, b } = { a: 1, b: 2 }) ist jedoch gültig, ebenso wie const { a, b } = { a: 1, b: 2 }.
Wenn Ihr Codierungsstil keine abschließenden Semikolons enthält, muss der ( ... ) Ausdruck durch ein Semikolon vorangestellt werden, oder er kann verwendet werden, um eine Funktion in der vorherigen Zeile auszuführen.
Beachten Sie, dass das äquivalente Bindungsmuster des obigen Codes keinen gültigen Syntax darstellt:
Sie können Zuweisungsmuster nur als die linke Seite des Zuweisungsoperators verwenden. Sie können sie nicht mit zusammengesetzten Zuweisungsoperatoren wie += oder *= verwenden.
Jede destrukturierte Eigenschaft kann einen Standardwert haben. Der Standardwert wird verwendet, wenn die Eigenschaft nicht vorhanden ist oder den Wert undefined hat. Er wird nicht verwendet, wenn die Eigenschaft den Wert null hat.
Der Standardwert kann jeder Ausdruck sein. Er wird nur bei Bedarf ausgewertet.
Sie können ein Destructuring-Muster mit einer Rest-Eigenschaft ...rest abschließen. Für Array-Destructuring sammelt es verbleibende Elemente des Iterables in ein neues Array namens rest (oder einen beliebigen Namen, den Sie ihm zuweisen). Für Objekt-Destructuring kopiert es alle aufzählbaren eigenen Eigenschaften des Objekts, die nicht bereits durch das Destructuring-Muster ausgewählt wurden, in ein neues Objekt namens rest.
Formal wird die ...rest-Syntax in einem Array-Destructuring als "Rest-Elemente" und in einem Objekt-Destructuring als "Rest-Eigenschaften" bezeichnet. Häufig sprechen wir jedoch einfach von der "Rest-Eigenschaft".
Die Rest-Eigenschaft muss die letzte im Muster sein und darf kein nachfolgendes Komma haben.
In einem Array-Destructuring von einem Array der Länge N, das auf der rechten Seite der Zuweisung angegeben ist, wenn die Anzahl der auf der linken Seite der Zuweisung angegebenen Variablen größer ist als N, werden nur die ersten N Variablen Werte zugewiesen. Die Werte der verbleibenden Variablen sind undefiniert.
Zwei Variablenwerte können in einem Destructuring-Ausdruck vertauscht werden.
Ohne Destructuring erfordert das Tauschen von zwei Werten eine temporäre Variable (oder in einigen Low-Level-Sprachen den XOR-swap Trick).
Es war schon immer möglich, ein Array aus einer Funktion zurückzugeben. Destructuring kann das Arbeiten mit einem Array-Rückgabewert prägnanter machen.
In diesem Beispiel gibt f() die Werte [1, 2] als seine Ausgabe zurück, die mit Destructuring in einer einzigen Zeile geparst werden können.
Sie können Rückgabewerte ignorieren, an denen Sie nicht interessiert sind:
Sie können auch alle zurückgegebenen Werte ignorieren:
Obwohl es in diesem Fall wahrscheinlich klarer ist, einfach die Funktion aufzurufen und Destructuring überhaupt nicht zu verwenden. Sie müssen den Rückgabewert nicht verwenden.
Die Resteigenschaft von Array-Destructuring kann ein weiteres Array oder ein Objektbindungsmuster sein. Das innere Destructuring zerlegt das Array, das nach dem Sammeln der Rest-Elemente erstellt wurde, sodass Sie auf diese Weise nicht auf Eigenschaften zugreifen können, die auf dem ursprünglichen Iterable vorhanden sind.
Diese Bindungsmuster können sogar verschachtelt sein, solange jede Rest-Eigenschaft die letzte in der Liste ist.
Andererseits kann Object-Destructuring nur einen Bezeichner als Rest-Eigenschaft haben.
Wenn die exec()-Methode eines regulären Ausdrucks einen Match findet, gibt sie ein Array zurück, das zuerst den gesamten übereinstimmenden Abschnitt des Strings enthält und dann die Abschnitte des Strings, die mit jeder gruppierten Klammer im regulären Ausdruck übereinstimmen. Destructuring ermöglicht es Ihnen, die Teile dieses Arrays einfach zu entpacken, den vollständigen Match zu ignorieren, wenn dieser nicht benötigt wird.
Array-Destructuring ruft das iterable Protokoll der rechten Seite auf. Daher kann jedes Iterable, nicht notwendigerweise Arrays, destrukturiert werden.
Nicht-Iterables können nicht als Arrays destrukturiert werden.
Iterables werden nur bis zur Zuweisung aller Bindungen iteriert.
Das Rest-Binding wird eifrig ausgewertet und erstellt ein neues Array, anstatt das alte Iterable zu verwenden.
Eine Eigenschaft kann aus einem Objekt entpackt und einer Variablen zugewiesen werden, die einen anderen Namen als die Objekteigenschaft hat.
Hier wird zum Beispiel const { p: foo } = o aus dem Objekt o die Eigenschaft p genommen und einer lokalen Variable namens foo zugewiesen.
Eine Eigenschaft kann sowohl
Objekte, die in Funktionsparameter übergeben werden, können ebenfalls in Variablen entpackt werden, die dann innerhalb des Funktionskörpers zugänglich sind. Was die Objektzuweisung betrifft, erlaubt die Destructuring-Syntax, dass die neue Variable den gleichen Namen oder einen anderen Namen als die ursprüngliche Eigenschaft hat und Standardwerte zuzuweisen für den Fall, dass das ursprüngliche Objekt die Eigenschaft nicht definiert.
Betrachten Sie dieses Objekt, das Informationen über einen Benutzer enthält.
Hier zeigen wir, wie man eine Eigenschaft des übergebenen Objekts in eine Variable mit dem gleichen Namen entpackt. Der Parameterwert { id } gibt an, dass die id-Eigenschaft des Objekts, das an die Funktion übergeben wird, in eine Variable mit demselben Namen entpackt werden soll, die dann innerhalb der Funktion verwendet werden kann.
Sie können den Namen der entpackten Variablen definieren. Hier entpacken wir die Eigenschaft namens displayName und benennen sie in dname um, um sie innerhalb des Funktionskörpers zu verwenden.
Verschachtelte Objekte können ebenfalls entpackt werden. Das folgende Beispiel zeigt die Eigenschaft fullname.firstName, die in eine Variable namens name entpackt wird.
Standardwerte können mit = angegeben werden und werden als Variablenwerte verwendet, wenn eine angegebene Eigenschaft im übergebenen Objekt nicht existiert.
Unten zeigen wir eine Funktion, bei der die Standardgröße 'big' ist, die Standardkoordinaten x: 0, y: 0 sind und der Standardradius 25 beträgt.
Im Funktionsskript für drawChart oben hat die destrukturierte linke Seite einen Standardwert von einem leeren Objekt = {}.
Sie hätten die Funktion auch ohne diesen Standardwert schreiben können. Wenn Sie jedoch diesen Standardwert weglassen, wird die Funktion erwarten, dass beim Aufruf mindestens ein Argument angegeben wird, während sie in ihrer aktuellen Form drawChart() ohne Angabe von Parametern aufgerufen werden kann. Andernfalls müssen Sie mindestens ein leeres Objektliteral angeben.
Für weitere Informationen siehe Default parameters > Destructured parameter with default value assignment.
Berechnete Eigenschaftennamen, wie bei Objektliteralen, können mit Destructuring verwendet werden.
Destructuring kann mit Eigenschaftsnamen verwendet werden, die keine gültigen JavaScript-Bezeichner sind, indem ein alternatives Bezeichner bereitgestellt wird, das gültig ist.
Objekt-Destructuring ist fast gleichbedeutend mit dem Zugriff auf Eigenschaften. Das bedeutet, wenn Sie versuchen, einen primitiven Wert zu destrukturieren, wird der Wert in das entsprechende Wrapper-Objekt gepackt und die Eigenschaft wird auf dem Wrapper-Objekt angesprochen.
Genauso wie beim Zugriff auf Eigenschaften wirft das Destructuring von null oder undefined einen TypeError.
Dies geschieht sogar, wenn das Muster leer ist.
Array- und Objekt-Destructuring können kombiniert werden. Angenommen, Sie wollen das dritte Element im Array props unten und dann die Eigenschaft name im Objekt, können Sie Folgendes tun:
Beim Deconstructing eines Objekts, wenn eine Eigenschaft nicht direkt in sich selbst angesprochen wird, wird die Suche entlang der Prototypenkette fortgesetzt.
| ECMAScript® 2027 Language Specification # sec-destructuring-assignment |
| ECMAScript® 2027 Language Specification # sec-destructuring-binding-patterns |
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.