Der Algorithmus für das strukturierte Klonen

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

Er klont, indem er das Eingabeobjekt rekursiv durchläuft und eine Karte der zuvor besuchten Referenzen führt, um ein unendliches Durchlaufen von Zyklen zu vermeiden.

Dinge, die nicht mit strukturiertem Klonen funktionieren

  • Function-Objekte können nicht vom Algorithmus für das strukturierte Klonen dupliziert werden; bei einem Versuch wird eine DataCloneError-Ausnahme ausgelöst.
  • 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.
    • Eigenschaftsdescriptoren, Setter, Getter und ähnliche metadatenartige Funktionen werden nicht dupliziert. Zum Beispiel, wenn ein Objekt mit einem Eigenschaftsdeskriptor schreibgeschützt markiert ist, wird es in der Kopie als lesbar/schreibbar dargestellt, da dies der Standard ist.
    • Die Prototypenkette wird nicht durchlaufen oder dupliziert.
    • Private Klassen-Eigenschaften werden nicht dupliziert. (Obwohl private Eigenschaften eingebauter 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 sollen auch andere "interessante" Eigenschaften der Fehler wie stack, cause usw. serialisieren.

Unterstützung für AggregateError wird erwartet, dass sie in die Spezifikation in whatwg/html#5749 aufgenommen wird (und wird bereits in einigen Browsern unterstützt).

Web/API-Typen

Siehe auch