Der algorithmus zum strukturierten Klonen

Der Algorithmus zum strukturierten Klonen kopiert komplexe JavaScript-Objekte. Er wird intern verwendet, wenn structuredClone() aufgerufen wird, um Daten zwischen Arbeitern mittels postMessage() zu übertragen, Objekte mit IndexedDB zu speichern oder Objekte für andere APIs zu kopieren.

Er klont, indem er rekursiv durch das Eingabeobjekt geht und dabei eine Karte von bereits besuchten Referenzen pflegt, um zu verhindern, dass Zyklen unendlich durchlaufen werden.

Dinge, die mit strukturiertem Klon nicht funktionieren

  • Function-Objekte können nicht durch den Algorithmus zum strukturierten Klonen dupliziert werden; der Versuch führt zu einer DataCloneError-Ausnahme.

  • Das Klonen von DOM-Knoten führt ebenfalls zu einer DataCloneError-Ausnahme.

  • Bestimmte Objekteigenschaften werden nicht beibehalten:

    • Die lastIndex-Eigenschaft von RegExp-Objekten wird nicht beibehalten.
    • Property-Deskriptoren, Setter, Getter und ähnliche metadatenähnliche Funktionen werden nicht dupliziert. Zum Beispiel: Wenn ein Objekt mit einem Property-Deskriptor als schreibgeschützt markiert ist, wird es im Duplikat als Lese/Schreib festgelegt, da dies der Standard ist.
    • Die Prototypenkette wird weder durchlaufen noch dupliziert.
    • Private Eigenschaften von Klassen werden nicht dupliziert. (Obwohl private Eigenschaften von eingebauten Typen möglicherweise dupliziert werden.)

Unterstützte Typen

JavaScript-Typen

Fehlertypen

Für Error-Typen muss der Fehlername einer der folgenden sein: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError (oder wird auf "Error" gesetzt).

Browser müssen die Eigenschaften name und message serialisieren und sind angehalten, andere "interessante" Eigenschaften der Fehler wie stack, cause usw. zu serialisieren.

Die Unterstützung für AggregateError soll zur Spezifikation in whatwg/html#5749 hinzugefügt werden (und wird bereits in einigen Browsern unterstützt).

Web/API-Typen

Siehe auch