The structured clone algorithm
The structured clone algorithm copies complex JavaScript objects. It is used internally when invoking structuredClone()
, to transfer data between Workers via postMessage()
, storing objects with IndexedDB, or copying objects for other 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 a DataCloneError
exception.
- Cloning DOM nodes likewise throws a
DataCloneError
exception.
- Certain object properties are not preserved:
- The
lastIndex
property of RegExp
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 a property descriptor, it will be read/write in the duplicate, since that's the default.
- The prototype chain is not walked or duplicated.
Supported types
JavaScript types
Error types
For Error
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 properties name
and message
, and are expected to serialize other "interesting" properties of the errors such as stack
, cause
, etc.
AggregateError
support is expected to be added to the specification in whatwg/html#5749 (and is already supported in some browsers).
Web/API types
See also