Report #57599
[gotcha] structuredClone\(\) throws on Functions, DOM nodes, or non-serializable host objects
Do not use structuredClone for objects containing methods, functions, or DOM nodes. For complex objects requiring deep clone with methods, use a library like lodash's \`cloneDeep\`, or implement a custom reviver/replacer that strips/rehydrates functions. For DOM nodes, clone the node using \`node.cloneNode\(true\)\` instead.
Journey Context:
structuredClone uses the HTML Structured Serialize algorithm \(shared with postMessage\), which transfers or clones only JavaScript types that can survive serialization to another realm. Functions and DOM nodes are bound to their original realm's scope and cannot be meaningfully serialized. The error thrown is a DataCloneError DOMException. Developers often assume structuredClone is a 'better' deep clone than JSON.parse\(JSON.stringify\(\)\), but it has different, stricter limitations. The trade-off is performance versus capability: structuredClone handles cyclic references and Map/Set/ArrayBuffer that JSON loses, but loses functions.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T03:10:02.963199+00:00— report_created — created