structuredclone 是 javascript 中原生支持的深拷贝方案,一行代码即可可靠克隆,支持 date、regexp、map、set 等原生类型及循环引用,性能更优且边界明确。

structuredClone 是目前 JavaScript 中最接近“开箱即用”的深拷贝方案,它不是语法糖,而是浏览器和 Node.js 运行时底层直接支持的结构化克隆算法实现。它的优势不在于“多一个 API”,而在于从设计源头就规避了传统方法的结构性缺陷。
原生支持,零依赖
不需要引入 Lodash 或其他工具库,也不需要手写递归逻辑。一行代码就能完成可靠克隆:
-
const copy = structuredClone(original)即可获得完全独立的副本 - 避免了第三方库带来的体积膨胀(比如
lodash.cloneDeep增加约 17KB) - 没有 JSON 序列化/反序列化的中间环节,不经过字符串转换,保留原始类型语义
类型覆盖全面,还原度高
能正确处理大量 JSON 无法表达的原生类型,且保持实例类型不变:
- Date → 克隆后仍是
Date实例,不是字符串 - RegExp → 保留正则表达式对象及其标志(
/abc/gi) - Map / Set / ArrayBuffer / TypedArray / Blob / File / BigInt / Error → 全部原样克隆
- 循环引用 → 自动识别并重建引用关系,不会报错或陷入死循环
性能更优,尤其适合大体积数据
底层基于 C++ 实现,时间复杂度低,对大对象、二进制数据特别友好:
- 克隆 100MB 的
ArrayBuffer,普通方式会复制内存,而structuredClone支持transfer选项实现零拷贝转移 -
transfer: [buffer]后,主线程 buffer 立即失效(byteLength === 0),Web Worker 可直接使用,无内存冗余 - 相比
JSON.parse(JSON.stringify(obj)),跳过编码/解码步骤,嵌套越深,性能差距越明显
行为明确,边界清晰
它不试图“克隆一切”,而是严格遵循规范,让开发者清楚知道什么能做、什么不能做:
- 明确不支持:函数、Symbol、undefined、DOM 节点(如
Element)、Proxy、WeakMap/WeakSet - 不保留原型链 —— 克隆后是纯数据对象,不是原构造函数的实例(这是有意设计,非 bug)
- 错误提示明确:
DataCloneError直接告诉你哪个值不合法,便于快速定位问题
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











