The structured clone algorithm is an algorithm defined by the HTML5 specification for copying complex JavaScript objects. It is used internally when transferring data to and from Workers via postMessage()
. It builds up a clone by recursing through the input object while maintaining a map of previously visited references in order to avoid infinitely traversing cycles.
Things that don't work with structured clone
Error
andFunction
objects cannot be duplicated by the structured clone algorithm; attempting to do so will throw aDATA_CLONE_ERR
exception.- Attempting to clone DOM nodes will likewise throw a
DATA_CLONE_ERR
exception. - Certain parameters of objects are not preserved:
- The
lastIndex
field ofRegExp
objects is not preserved. - Property descriptors, setters, and getters (as well as similar metadata-like features) are not duplicated. For example, if an object is marked read-only using a property descriptor, it will be read-write in the duplicate, since that's the default condition.
- The prototype chain does not get walked and duplicated.
- The
Supported types
Object type | Notes |
---|---|
All primitive types | However not symbols |
Boolean object | |
String object | |
Date | |
RegExp | The lastIndex field is not preserved. |
Blob |
|
File |
|
FileList |
|
ArrayBuffer | |
ArrayBufferView | This basically means all typed arrays like Int32Array etc. |
ImageData |
|
Array | |
Object | This just includes plain objects (e.g. from object literals) |
Map | |
Set |
See also
Document Tags and Contributors
Tags:
Contributors to this page:
kevin-albert,
liuqipeng417,
teoli,
abroz,
chrisdavidmills,
CBroe,
evilpie,
BlindWanderer,
rk17,
Jeremie,
Sheppy,
kscarfone,
kevmoo,
timoxley,
fusionchess
Last updated by:
kevin-albert,