Deep Copy in JavaScript: Die 5 besten Methoden für 2024

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum funktioniert normales Kopieren nicht?

\n\n

Stell dir vor: Du entwickelst eine App, die eine komplexe Benutzerkonfiguration verarbeitet. Du schreibst const newConfig = oldConfig, änderst ein paar Felder – und plötzlich ändert sich auch das Originalobjekt. Kommt dir bekannt vor? 👋

\n\n

In JavaScript werden Objekte als Referenz übergeben. Das bedeutet, dass eine einfache Zuweisung kein neues Objekt erstellt, sondern nur einen Zeiger auf das alte kopiert. Daher die Frage, die tausende Entwickler auf Stack Overflow quält: "What is the most efficient way to deep clone an object in JavaScript?".

\n\n

In diesem Artikel zeigen wir dir alle gängigen Methoden für Deep Copy, ihre Vor- und Nachteile sowie ihre Performance. Du erfährst, welche Methode du 2024 wählen solltest und wie du deinen eigenen zuverlässigen Deep Clone schreibst.

\n\n

Warum sprechen wir überhaupt über Deep Copy?

\n\n

Deep Copy (tiefes Kopieren) erstellt eine vollständig unabhängige Kopie eines Objekts mit allen verschachtelten Strukturen. Im Gegensatz zu Shallow Copy (flaches Kopieren), bei dem verschachtelte Objekte gemeinsam genutzt werden.

\n\n

Hier sind typische Szenarien, in denen du Deep Copy brauchst:

\n
    \n
  • Arbeit mit Redux / Zustand: Der State darf nicht mutiert werden, du musst Kopien erstellen.
  • \n
  • Datenserialisierung für den Versand an einen Server.
  • \n
  • Arbeit mit Caches oder Konfigurationen, die nicht verändert werden dürfen.
  • \n
  • Unit-Tests: Um die Originaldaten nicht zu beeinflussen.
  • \n
\n\n

Aber so einfach ist es nicht. Wenn du versuchst, ein Objekt mit Funktionen, undefined, Symbol oder zirkulären Referenzen zu kopieren – viele Methoden scheitern oder verlieren Daten. Lass uns jede Methode im Detail durchgehen.

\n\n

Methode 1: JSON.parse(JSON.stringify(obj)) – alt, aber bewährt

\n\n

Dies ist die beliebteste Methode unter Anfängern. Sie ist einfach und schnell geschrieben:

\n\n
const original = {\n    name: "Anna",\n    age: 25,\n    address: { city: "Berlin", zip: 10115 },\n    hobbies: ["Lesen", "Laufen"]\n};\n\nconst clone = JSON.parse(JSON.stringify(original));\n\nclone.address.city = "München";\nconsole.log(original.address.city); // "Berlin" – ✅ Kopie ist unabhängig!\n
\n\n

Vorteile:

\n
    \n
  • 🔥 Sehr einfache Syntax.
  • \n
  • 🔥 Funktioniert für die meisten einfachen Fälle.
  • \n
\n\n

Nachteile (kritisch!):

\n
    \n
  • ❌ Verliert Funktionen – sie werden zu undefined.
  • \n
  • ❌ Verliert undefined – Felder mit dem Wert undefined verschwinden.
  • \n
  • ❌ Verliert Symbol – Symbol-Schlüssel gehen verloren.
  • \n
  • ❌ Funktioniert nicht mit zirkulären Referenzen – wirft einen TypeError.
  • \n
  • ❌ Probleme mit Datum – Date wird zu einem String.
  • \n
  • ❌ Probleme mit Map, Set, RegExp – sie werden zu leeren Objekten.
  • \n
\n\n

Fazit: Nur geeignet für Daten, die garantiert in JSON serialisierbar sind (Strings, Zahlen, Arrays, einfache Objekte).

\n\n

Methode 2: Structured Clone API – moderner Standard (2024)

\n\n

Seit 2022 gibt es in JavaScript eine native Methode für Deep Copy – structuredClone. Sie ist in allen modernen Browsern und Node.js 17+ verfügbar.

\n\n
const clone = structuredClone(original);\n\nclone.address.city = "Köln";\nconsole.log(original.address.city); // "Berlin" – ✅\n
\n\n

Was structuredClone kann:

\n
    \n
  • ✅ Zirkuläre Referenzen – funktioniert!
  • \n
  • ✅ Datum – behält den Typ Date.
  • \n
  • ✅ Map und Set – werden korrekt kopiert.
  • \n
  • ✅ RegExp – funktioniert ebenfalls.
  • \n
  • ✅ ArrayBuffer und Ty

Blogs

Buchempfehlungen