Der strukturierte Klon-Algorithmus

Der strukturierte Klon-Algorithmus kopiert komplexe JavaScript-Objekte. Er wird intern verwendet bei der Aufruf von structuredClone(), um Daten zwischen Workern über postMessage() zu übertragen, um Objekte mit IndexedDB zu speichern oder Objekte für andere APIs zu kopieren.

Er klont, indem er das Eingabeobjekt rekursiv durchläuft und dabei eine Zuordnung zu zuvor besuchten Referenzen beibehält, um unendliche Zyklen zu vermeiden.

Dinge, die mit strukturiertem Klon nicht funktionieren

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

  • Das Klonen von DOM-Knoten wirft ebenfalls eine DataCloneError-Ausnahme.

  • Bestimmte Objekteigenschaften werden nicht beibehalten:

    • Die lastIndex-Eigenschaft von RegExp-Objekten wird nicht beibehalten.
    • Eigenschaftsbeschreibungen, Setter, Getter und ähnliche metadatenartige Merkmale werden nicht dupliziert. Zum Beispiel, wenn ein Objekt mit einem Eigenschaftsbeschreiber als schreibgeschützt markiert ist, ist es im Duplikat schreib-/lesbar, da dies der Standard ist.
    • Die Prototypen-Kette wird nicht durchlaufen oder dupliziert.
    • Klasseneigene private Eigenschaften 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 sollen auch andere "interessante" Eigenschaften der Fehler wie stack, cause usw. serialisieren.

AggregateError-Unterstützung wird voraussichtlich in die Spezifikation in whatwg/html#5749 aufgenommen (und wird bereits in einigen Browsern unterstützt).

Web/API-Typen

Siehe auch