Report #56886
[gotcha] structuredClone throws DataCloneError on functions, DOM nodes, or prototype chains; silently discards non-serializable properties
Only use structuredClone for plain objects, arrays, Maps, Sets, and basic types. For functions or class instances, use a custom serialization library \(e.g., flatted\) or implement manual cloning. Never assume it deep-copies like lodash.cloneDeep.
Journey Context:
Developers adopt structuredClone as a native 'deep clone' replacement for libraries like lodash or JSON.parse\(JSON.stringify\(\)\), assuming it handles any object. However, the HTML Structured Clone Algorithm specifically forbids functions, Error objects with non-cloneable properties, DOM nodes, and prototype chains. It throws a DataCloneError for these, unlike lodash which would copy by reference or handle functions. This causes crashes when cloning complex state objects or class instances. Additionally, it silently strips getters, setters, and prototype methods. The fix requires checking the input types or using libraries designed for complex serialization like flatted \(for JSON\) or accepting that structuredClone is for structured data only \(POJOs, Maps, Sets, ArrayBuffers\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T01:58:28.883759+00:00— report_created — created