structuredclone是现代javascript最简单安全的深拷贝方法,一行代码即可克隆对象并自动处理循环引用;支持object、array、map、set、date、regexp、arraybuffer等类型,不支持function、promise、dom节点等不可序列化值。

structuredClone 是现代 JavaScript 中最简单、最安全的深拷贝方法,它原生支持大部分常见数据类型,无需手动处理循环引用或特殊对象。
structuredClone 的基本用法
直接传入要克隆的对象即可,返回一个全新的、与原对象完全独立的副本:
const original = { a: 1, b: [2, 3], c: { d: 4 } };
const clone = structuredClone(original);
clone.b.push(5); // 不会影响 original.b
它能正确处理哪些类型?
structuredClone 支持标准可序列化结构,包括:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 普通对象、数组、Map、Set、Date、RegExp、ArrayBuffer、TypedArray、DataView
- BigInt、Boolean、null、Number、String、Symbol(仅限显式允许的 Symbol,如 Symbol.for('key'))
- 嵌套结构和深层引用关系(自动处理循环引用,不会报错)
不支持函数、Promise、Error、DOM 节点、WeakMap、WeakSet 等不可序列化类型——遇到会直接抛错,避免静默失败。
使用时要注意的限制
它不是万能的,需留意运行环境和数据内容:
- 浏览器中需 Chrome 98+、Firefox 99+、Safari 15.4+;Node.js 需 17.0+(且开启 --experimental-structured-clone 标志,18.12+ 默认启用)
- 若对象含不可克隆值(如函数),会抛出 DataCloneError,建议用 try/catch 包裹
- 不克隆对象的原型链和 getter/setter,结果是纯数据副本(符合多数深拷贝场景预期)
替代方案对比:什么时候该选它?
相比 JSON.parse(JSON.stringify()) 或第三方库(如 lodash.cloneDeep):
- 比 JSON 方案更健壮:支持 Map/Set/Date/BigInt/循环引用,且不丢失 undefined 和 NaN
- 比手写或库更轻量:零依赖、无额外包体积、V8 引擎级优化,性能通常更好
- 适合大多数配置对象、状态快照、Worker 通信等场景;若需克隆函数或自定义逻辑,仍需其他方案
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










