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 einerDataCloneError
-Ausnahme. -
Das Klonen von DOM-Knoten führt ebenfalls zu einer
DataCloneError
-Ausnahme. -
Bestimmte Objekteigenschaften werden nicht beibehalten:
- Die
lastIndex
-Eigenschaft vonRegExp
-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.)
- Die
Unterstützte Typen
JavaScript-Typen
Array
ArrayBuffer
Boolean
DataView
Date
Error
-Typen (aber siehe Fehlertypen unten).Map
Number
Object
-Objekte: aber nur einfache Objekte (z.B. aus Objektliteralen).- Primitive Typen, außer
symbol
. RegExp
: jedoch wirdlastIndex
nicht beibehalten.Set
String
TypedArray
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
AudioData
Blob
CropTarget
CryptoKey
DOMException
: Browser müssen die Eigenschaftenname
undmessage
serialisieren. Andere Attribute können ebenfalls serialisiert/gekloont werden.DOMMatrix
DOMMatrixReadOnly
DOMPoint
DOMPointReadOnly
DOMQuad
DOMRect
DOMRectReadOnly
EncodedAudioChunk
EncodedVideoChunk
FencedFrameConfig
File
FileList
FileSystemDirectoryHandle
FileSystemFileHandle
FileSystemHandle
GPUCompilationInfo
GPUCompilationMessage
GPUPipelineError
ImageBitmap
ImageData
RTCCertificate
RTCEncodedAudioFrame
RTCEncodedVideoFrame
VideoFrame
WebTransportError
Hinweis: Serialisierbare Objekte sind in Web IDL-Dateien mit dem Attribut [Serializable]
gekennzeichnet.