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 einerDataCloneError
-Ausnahme. -
Das Klonen von DOM-Knoten wirft ebenfalls eine
DataCloneError
-Ausnahme. -
Bestimmte Objekteigenschaften werden nicht beibehalten:
- Die
lastIndex
-Eigenschaft vonRegExp
-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.)
- Die
Unterstützte Typen
JavaScript-Typen
Array
ArrayBuffer
Boolean
DataView
Date
Error
-Typen (siehe jedoch Fehlertypen unten).Map
Number
Object
-Objekte: jedoch nur einfache Objekte (z.B. aus Objekt-Literalen).- Primitive Typen, außer
symbol
. RegExp
: Beachten Sie jedoch, dasslastIndex
nicht beibehalten wird.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 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
AudioData
Blob
CropTarget
CryptoKey
DOMException
: Browser müssen die Eigenschaftenname
undmessage
serialisieren. Andere Attribute können ebenfalls serialisiert/kloniert 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]
markiert.