The structured clone algorithm
Thestructured clone algorithm copies complex JavaScript objects.It is used internally when invokingstructuredClone()
, to transfer data betweenWorkers viapostMessage()
, storing objects withIndexedDB, or copying objects forother APIs.
It clones by recursing through the input object while maintaining a map of previously visited references, to avoid infinitely traversing cycles.
Things that don't work with structured clone
Function
objects cannot be duplicated by the structured clone algorithm; attempting to throws aDataCloneError
exception.- Cloning DOM nodes likewise throws a
DataCloneError
exception. - Certain object properties are not preserved:
- The
lastIndex
property ofRegExp
objects is not preserved. - Property descriptors, setters, getters, and similar metadata-like features are not duplicated.For example, if an object is marked readonly with aproperty descriptor, it will be read/write in the duplicate, since that's the default.
- The prototype chain is not walked or duplicated.
- Class private elements are not duplicated. (Although internal fields of built-in types may.)
- The
Supported types
JavaScript types
Array
ArrayBuffer
Boolean
DataView
Date
Error
types (but seeError types below).Map
Number
Object
objects: but only plain objects (e.g., from object literals).- Primitive types, except
symbol
. RegExp
: but note thatlastIndex
is not preserved.Set
String
TypedArray
Error types
ForError
types, the error name must be one of:Error
,EvalError
,RangeError
,ReferenceError
,SyntaxError
,TypeError
,URIError
(or will be set to "Error").
Browsers must serialize the propertiesname
andmessage
, and are expected to serialize other "interesting" properties of the errors such asstack
,cause
, etc.
AggregateError
support is expected to be added to the specification inwhatwg/html#5749 (and is already supported in some browsers).
Web/API types
AudioData
Blob
CropTarget
CryptoKey
DOMException
: browsers must serialize the propertiesname
andmessage
. Other attributes may also be serialized/cloned.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
Note:Serializable objects are marked up inWeb IDL files with the attribute[Serializable]
.