Menu

JavaScript Destructuring: Objekte, Arrays & Defaults

So funktioniert Destructuring in JavaScript: Werte aus Objekten und Arrays entpacken, umbenennen, Defaults setzen, verschachtelte Muster und Funktionsparameter.

Destructuring in JavaScript: Pattern Matching auf Datenstrukturen

Mit Destructuring schreibst du ein Muster, das die Form eines Objekts oder Arrays nachbildet, und ziehst damit in einer einzigen Zeile Werte per Name oder Position heraus. Statt dich Eigenschaft für Eigenschaft durch einen Wert zu hangeln, beschreibst du einfach, was du brauchst – und JavaScript reicht es dir rüber.

Es gibt zwei Varianten:

index.js
Output
Click Run to see the output here.

Die geschweiften Klammern greifen Objekte per Eigenschaftsnamen ab, die eckigen Klammern hingegen Arrays per Position. In beiden Fällen sind die Variablen vor dem = neue Deklarationen — du greifst also nicht per Index auf den Wert zu, sondern beschreibst ein Muster, mit dem die einzelnen Teile herausgezogen werden.

Bevor es Destructuring gab, sah derselbe Code so aus:

const name = user.name;
const age = user.age;
const first = scores[0];
const second = scores[1];

Schlimm ist das nicht, aber sobald du das in jeder Funktion machst, wird's schnell nervig.

Object Destructuring greift auf Property-Namen zurück

Bei Objekten müssen die Namen in den geschweiften Klammern mit den Property-Namen der Quelle übereinstimmen. Die Reihenfolge spielt keine Rolle — JavaScript sucht die Werte anhand des Schlüssels heraus.

index.js
Output
Click Run to see the output here.

Existiert eine Property nicht im Objekt, ist die entsprechende Variable schlicht undefined – einen Fehler gibt es dabei nicht:

index.js
Output
Click Run to see the output here.

Dieses stille undefined solltest du dir gut merken – ein Tippfehler im Property-Namen ist der Grund, warum man um 2 Uhr nachts verzweifelt vor dem Code sitzt.

Variablen beim Destructuring umbenennen

Manchmal passt der Property-Name am Objekt einfach nicht als Variablenname – vielleicht kollidiert er mit etwas anderem im Scope, oder die API verwendet eine Namenskonvention, die dir nicht gefällt. Mit der Syntax original: neuerName kannst du beim Destructuring direkt umbenennen:

index.js
Output
Click Run to see the output here.

Lies das als „nimm die Property id und nenne sie userId." Zuerst kommt der Property-Name, nach dem Doppelpunkt dann der neue Variablenname. Sieht aus wie eine Typ-Annotation aus anderen Sprachen – ist aber keine.

Defaultwerte beim Destructuring

Falls eine Property möglicherweise fehlt, kannst du direkt im Muster einen Defaultwert festlegen:

index.js
Output
Click Run to see the output here.

Defaultwerte greifen nur, wenn der Wert undefined ist. null, 0 und "" werden dagegen unverändert durchgereicht:

index.js
Output
Click Run to see the output here.

Genau diese Stelle bringt viele ins Straucheln. Wenn du willst, dass auch null den Defaultwert auslöst, brauchst du eine explizite Prüfung – oder du verwendest nach dem Destructuring den Nullish-Coalescing-Operator ??.

Defaultwerte und Umbenennen lassen sich übrigens auch kombinieren:

index.js
Output
Click Run to see the output here.

Array Destructuring funktioniert über die Position

Arrays haben keine Property-Namen, sondern nur Indizes – das Pattern matcht hier also nach der Position. Mit Kommas kannst du gezielt Einträge überspringen, die dich gerade nicht interessieren:

index.js
Output
Click Run to see the output here.

Die zwei führenden Kommas bedeuten: "Index 0 und 1 überspringen." Visuell etwas kryptisch, aber praktisch, wenn du nur einen Wert aus der Mitte brauchst.

Array Destructuring spielt seine Stärken besonders dann aus, wenn Funktionen Tupel zurückgeben:

index.js
Output
Click Run to see the output here.

Dasselbe Muster sieht man überall in React-Hooks: const [count, setCount] = useState(0).

Rest-Pattern: Den Rest einsammeln

Innerhalb eines Destructuring-Patterns sammelt ...name alles, was nicht namentlich oder über die Position zugeordnet wurde, in einer neuen Variablen.

Beim Array-Destructuring schnappt sich der Rest-Operator das Ende:

index.js
Output
Click Run to see the output here.

Bei Objekten schnappt sich der Rest-Operator alle Eigenschaften, die nicht explizit benannt wurden:

index.js
Output
Click Run to see the output here.

Das ist der idiomatische Weg, ein Feld aus einem Objekt zu entfernen, ohne es zu mutieren – rest ist ein neues Objekt, das alles außer id enthält.

Der Rest-Operator muss immer am Ende des Patterns stehen. const [...init, last] ist ein Syntaxfehler.

Verschachteltes Destructuring

Patterns lassen sich verschachteln. Ist eine Eigenschaft selbst ein Objekt oder Array, kannst du sie im selben Ausdruck direkt weiter zerlegen:

index.js
Output
Click Run to see the output here.

Mächtig, aber mit Bedacht einsetzen. Sobald drei Ebenen verschachtelter Klammern im Spiel sind, fühlt sich der Code an wie ein Rätsel. Dann lieber Zwischenwerte in eigene Variablen auslagern — Lesbarkeit schlägt Eleganz.

Ein Stolperstein: data: { user } im Muster erzeugt keine Variable namens data. Es ist eine Anweisung im Sinne von „steig in data hinein und mach mit dem Destructuring weiter". Wenn du data selbst brauchst, musst du es zusätzlich aufnehmen:

index.js
Output
Click Run to see the output here.

Destructuring von Funktionsparametern

Am häufigsten wirst du Destructuring direkt in der Parameterliste einer Funktion einsetzen. Aus einem schlichten "Options-Objekt übergeben" wird so eine Signatur, die sich selbst dokumentiert:

index.js
Output
Click Run to see the output here.

Am Aufrufpunkt sieht das aus wie jeder andere Aufruf mit Options-Objekt. In der Funktion selbst bekommst du benannte Variablen samt Defaultwerten – Schluss mit dem ewigen options.name || "default"-Boilerplate.

Eine Stolperfalle gibt's aber: Rufst du die Funktion ganz ohne Argument auf, knallt's, weil sich undefined nicht destrukturieren lässt. Gib dem kompletten Parameter deshalb einen Defaultwert:

index.js
Output
Click Run to see the output here.

Das = {} hinter dem Pattern heißt so viel wie: „Falls gar kein Argument reinkommt, tu so, als wäre es ein leeres Objekt." Danach greifen die inneren Defaultwerte.

Variablen tauschen und neu zuweisen

Destructuring funktioniert auch mit bereits deklarierten Variablen – allerdings brauchst du dann Klammern um das Object-Pattern, sonst interpretiert JavaScript das { als Beginn eines Blocks:

index.js
Output
Click Run to see the output here.

Der Array-Swap ist schön sauber. Das Neuzuweisen von Objekteigenschaften braucht man seltener, aber den Trick mit den Klammern sollte man im Hinterkopf behalten — irgendwann kommt der Moment, wo man ihn gebrauchen kann.

Ein Beispiel aus der Praxis

Packen wir das meiste vom Gelernten zusammen — eine Funktion, die eine API-Antwort verarbeitet:

index.js
Output
Click Run to see the output here.

Jede destrukturierte Ebene hat einen Defaultwert. Dadurch übersteht die Funktion auch unvollständige Daten, ohne dass du dich durch einen Wust an if-Abfragen kämpfen musst. Und genau darin liegt der eigentliche Gewinn: Signaturen, die gleichzeitig präzise und nachsichtig sind.

Als Nächstes: der Spread-Operator für Objekte

Mit Destructuring holst du Werte aus Objekten heraus. Mit Spread setzt du sie wieder hinein – zum Kopieren, Zusammenführen und Überschreiben. Im modernen JavaScript sind die beiden ein unzertrennliches Duo, und Spread ist der nächste Halt.

Häufig gestellte Fragen

Was ist Destructuring in JavaScript?

Destructuring ist eine Syntax, mit der du Werte aus Objekten oder Arrays in einem Schritt entpackst und an Variablen bindest. const { name } = user; holt die Eigenschaft name aus user. const [first, second] = list; greift die ersten beiden Elemente aus list. Auf der linken Seite des = steht dabei ein Muster, das die Struktur des Werts auf der rechten Seite widerspiegelt.

Wie benennt man eine Variable beim Destructuring um?

Dafür gibt es die Syntax { original: neuerName }. const { name: username } = user; holt die Eigenschaft name aus user und bindet sie an eine lokale Variable namens username. Das sieht auf den ersten Blick wie eine Typannotation aus – merk dir einfach: erst der Property-Name, dann nach dem Doppelpunkt der neue Variablenname.

Kann man beim Destructuring Default-Werte vergeben?

Ja. const { timeout = 5000 } = options; setzt 5000 ein, wenn options.timeout den Wert undefined hat. Defaults greifen ausschließlich bei undefinednull, 0 und '' werden unverändert durchgereicht. Defaults und Umbenennen lassen sich auch kombinieren: const { t: timeout = 5000 } = options;.

Was ist der Unterschied zwischen Destructuring und Spread?

Sieht ähnlich aus, macht aber genau das Gegenteil. Destructuring (const { a, b } = obj) zieht Werte aus einer Struktur heraus. Spread (const copy = { ...obj }) packt Werte in eine neue Struktur hinein. Taucht ... innerhalb eines Destructuring-Musters auf, ist das ein Rest-Pattern – es sammelt alles Übriggebliebene in eine neue Variable.

Lerne mit Coddy zu programmieren

LOS GEHT'S