Report #5671
[gotcha] structuredClone throws DataCloneError on Functions, Proxies, or DOM nodes
Strip functions and non-serializable properties before cloning, or implement a custom replacer for structuredClone. For methods, ensure they are not enumerable or are explicitly filtered. For Proxies, unwrap them to the target before cloning or use a serialization library that handles them.
Journey Context:
structuredClone is the modern way to deep clone objects in JavaScript, supporting circular references and many built-in types like Map, Set, and ArrayBuffer. However, it strictly follows the HTML structured clone algorithm, which forbids functions, DOM nodes, and Proxy objects. Many developers assume structuredClone is a 'better JSON.parse\(JSON.stringify\(...\)\)' and expect it to simply ignore functions like JSON.stringify does. Instead, it throws a DataCloneError, crashing the operation. This is particularly dangerous when cloning class instances with methods or objects that have been instrumented with Proxies for debugging. The algorithm also clones the target of a Proxy, but if the Proxy has non-configurable traps or the object is a Proxy to a non-serializable type, it fails. The safe pattern is to pre-process objects to strip functions and unwrap Proxies before calling structuredClone.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T21:51:04.519459+00:00— report_created — created