Der strukturierte Klon-Algorithmus
Der strukturierte Klon-Algorithmus kopiert komplexe JavaScript-Objekte. Er wird intern verwendet, wenn structuredClone() aufgerufen wird, um Daten zwischen Workers über postMessage() zu übertragen, Objekte mit IndexedDB zu speichern oder Objekte für andere APIs zu kopieren.
Es wird durch Rekursion durch das Eingabeobjekt geklont, während eine Karte der bereits besuchten Referenzen erstellt wird, um das endlose Durchlaufen von Zyklen zu vermeiden.
Dinge, die mit dem strukturierten Klon nicht funktionieren
Function-Objekte können vom strukturierten Klon-Algorithmus nicht dupliziert werden; bei einem Versuch wird eineDataCloneError-Ausnahme ausgelöst.- Das Klonen von DOM-Knoten führt ebenso zu einer
DataCloneError-Ausnahme. - Bestimmte Objekteigenschaften werden nicht beibehalten:
- Die
lastIndex-Eigenschaft vonRegExp-Objekten wird nicht beibehalten. - Eigenschafts-Deskriptoren, Setter, Getter und ähnliche meta-datenähnliche Merkmale werden nicht dupliziert. Zum Beispiel, wenn ein Objekt mit einem Eigenschafts-Deskriptor als schreibgeschützt markiert ist, wird es in der Kopie schreibbar sein, da dies der Standard ist.
- Die Prototypenkette wird nicht durchlaufen oder dupliziert.
- Private Klassenelemente werden nicht dupliziert. (Obwohl interne Felder von eingebauten Typen möglicherweise doch.)
- Die
Unterstützte Typen
>JavaScript-Typen
ArrayArrayBufferBooleanDataViewDateError-Typen (siehe jedoch Fehlertypen unten).MapNumberObject-Objekte: aber nur einfache Objekte (z. B. aus Objektliteralen).- Primitive Typen, außer
symbol. RegExp: Beachten Sie jedoch, dasslastIndexnicht beibehalten wird.SetStringTypedArray
Fehlertypen
Für Error-Typen muss der Fehlername einer der folgenden sein: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError (oder er 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.
AggregateError-Unterstützung soll zur Spezifikation in whatwg/html#5749 hinzugefügt werden (und wird bereits in einigen Browsern unterstützt).
Web/API-Typen
AudioDataBlobCropTargetCryptoKeyDOMException: Browser müssen die Eigenschaftennameundmessageserialisieren. Andere Attribute können ebenfalls serialisiert/geklont werden.DOMMatrixDOMMatrixReadOnlyDOMPointDOMPointReadOnlyDOMQuadDOMRectDOMRectReadOnlyEncodedAudioChunkEncodedVideoChunkFencedFrameConfigFileFileListFileSystemDirectoryHandleFileSystemFileHandleFileSystemHandleGPUCompilationInfoGPUCompilationMessageGPUPipelineErrorImageBitmapImageDataRTCCertificateRTCEncodedAudioFrameRTCEncodedVideoFrameVideoFrameWebTransportError
Hinweis:
Serialisierbare Objekte sind in Web IDL-Dateien mit dem Attribut [Serializable] markiert.