Destructuring, Spread und Rest in JavaScript
Destructuring, Spread und Rest in JavaScript
~13 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Drei eng verwandte, moderne Syntax-Werkzeuge, die JavaScript-Code deutlich kompakter machen – und die wir bereits in Kapitel 8 (Rest-Parameter) und Kapitel 11 (Spread beim Kopieren) kurz gestreift haben. Jetzt sehen wir uns alle drei im Detail an.
Array-Destructuring
const betraege = [2400, -850, -120];
const [erster, zweiter, dritter] = betraege;
console.log(erster, zweiter, dritter); // 2400 -850 -120
const [einnahme, ...restBetraege] = betraege; // Rest-Muster: sammelt den REST in ein neues Array
console.log(einnahme); // 2400
console.log(restBetraege); // [-850, -120]
const [, zweiterUebersprungen] = betraege; // Elemente überspringen mit leerem Slot
console.log(zweiterUebersprungen); // -850Objekt-Destructuring
const transaktion = { beschreibung: 'Miete Februar', betrag: -850, kategorie: 'Miete' };
const { beschreibung, betrag } = transaktion;
console.log(beschreibung, betrag); // 'Miete Februar' -850Anders als bei Arrays spielt bei Objekten die REIHENFOLGE keine Rolle – es zählt der EIGENSCHAFTSNAME. Zwei nützliche Zusatz-Features:
const transaktion = { beschreibung: 'Miete Februar', betrag: -850 };
// Umbenennen beim Destructuring:
const { betrag: geldbetrag } = transaktion;
console.log(geldbetrag); // -850 (NICHT 'betrag' - dieser Name existiert hier nicht)
// Default-Wert, falls die Eigenschaft fehlt:
const { notiz = 'Keine Notiz' } = transaktion;
console.log(notiz); // 'Keine Notiz' - transaktion.notiz existiert nicht, Default greiftDestructuring direkt in Funktionsparametern
Ein extrem häufiges Praxis-Muster – besonders nützlich, wenn eine Funktion ein Objekt mit vielen Feldern erhält, aber nur wenige davon braucht:
function formatiereTransaktion({ beschreibung, betrag, kategorie = 'Sonstiges' }) {
return `${beschreibung} (${kategorie}): ${betrag} EUR`;
}
console.log(formatiereTransaktion({ beschreibung: 'Kino', betrag: -18 }));
// 'Kino (Sonstiges): -18 EUR'Spread-Operator bei Arrays: Kopieren und Zusammenführen
const januarBetraege = [2400, -850];
const februarBetraege = [-60, -18];
const kopie = [...januarBetraege]; // flache KOPIE, kein mutierendes Alias
const alleBetraege = [...januarBetraege, ...februarBetraege]; // zusammenführen
console.log(alleBetraege); // [2400, -850, -60, -18]Spread-Operator bei Objekten: unveränderliche Updates
Da Objekte per Referenz vergleichen werden (Kapitel 12), ist der Spread-Operator der Standard-Weg, eine "aktualisierte Kopie" zu erzeugen, statt das Original zu mutieren:
const transaktion = { beschreibung: 'Miete Februar', betrag: -850, kategorie: 'Miete' };
// Neue Kopie mit geändertem Betrag, Rest bleibt gleich:
const korrigiert = { ...transaktion, betrag: -870 };
console.log(korrigiert); // { beschreibung: 'Miete Februar', betrag: -870, kategorie: 'Miete' }
console.log(transaktion); // unverändert: { beschreibung: 'Miete Februar', betrag: -850, kategorie: 'Miete' }Achtung: Spread erzeugt nur eine FLACHE Kopie ("shallow copy") – VERSCHACHTELTE Objekte/Arrays innerhalb bleiben dieselbe Referenz. { ...original, kategorie: { ...original.kategorie, name: 'Neu' } } zeigt, wie man auch verschachtelte Ebenen korrekt kopiert.
Praxisbeispiel: eine Transaktion sicher aktualisieren
function aktualisiereTransaktion(transaktion, aenderungen) {
return { ...transaktion, ...aenderungen };
}
const original = { beschreibung: 'Miete Februar', betrag: -850, kategorie: 'Miete' };
const aktualisiert = aktualisiereTransaktion(original, { betrag: -870 });
console.log(original); // { beschreibung: 'Miete Februar', betrag: -850, kategorie: 'Miete' }
console.log(aktualisiert); // { beschreibung: 'Miete Februar', betrag: -870, kategorie: 'Miete' }