structuredclone可一行完成深度复制,支持date、map、regexp等原生类型及循环引用;支持transfer零拷贝迁移arraybuffer等;不支持函数、symbol、dom节点、proxy、weakmap/weakset及class实例;node.js 17+、chrome 98+等现代环境已原生支持。

直接用 structuredClone 就行,一行代码完成深度复制,不需序列化、不依赖第三方库,还能保留 Date、Map、RegExp 等原生类型身份,自动处理循环引用。
基础用法:传入对象,拿到独立副本
对绝大多数普通对象、嵌套对象、数组、日期、正则、集合等,只需调用一次:
-
const cloned = structuredClone(original)—— 返回全新对象,与原始对象内存隔离 - 修改
cloned.arr[0].name不会影响original.arr[0].name -
cloned.date instanceof Date仍为 true,类型不丢失 - 含循环引用的对象(如
obj.self = obj)也能安全克隆,不会栈溢出
进阶技巧:用 transfer 实现零拷贝迁移
当处理 ArrayBuffer、TypedArray 等大型二进制数据时,加 transfer 选项可避免内存复制,提升性能:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const transferred = structuredClone(buf, { transfer: [buf] })- 执行后
buf.byteLength变为 0,说明所有权已移交 - 适用于向 Web Worker 传递视频帧、音频缓冲区等高频大数据
- 仅支持可转移对象(
ArrayBuffer、MessagePort、ImageBitmap等)
注意边界:哪些东西它克隆不了
structuredClone 能力强大,但不是万能的。以下类型会直接报错(DataCloneError)或被忽略:
- 函数(
function、箭头函数)—— 闭包和执行上下文无法序列化 -
Symbol属性 —— 克隆后消失 - DOM 节点(
document.body、HTMLElement)—— 浏览器环境不支持 -
Proxy、WeakMap、WeakSet—— 内部状态不可枚举或弱引用特性导致无法克隆 - Class 实例 —— 原型链丢失,
cloned instanceof MyClass为 false
兼容性与使用前提
该 API 已稳定落地,现代环境无需 polyfill:
- Node.js 17+、Chrome 98+、Firefox 94+、Safari 16.4+
- 若需兼容旧环境,可先检测:
typeof structuredClone === 'function' - 不支持时建议降级到
JSON.parse(JSON.stringify())(仅限纯数据)或轻量递归方案
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










