news 2026/5/9 8:20:29

如何用 structuredClone 原生函数实现复杂对象深拷贝

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 structuredClone 原生函数实现复杂对象深拷贝

structuredClone 是浏览器原生深拷贝方法,支持 Map、Set、Date、RegExp、ArrayBuffer 等复杂类型及循环引用,不支持函数、Promise、WeakMap 等;可通过 transfer 选项高效转移 ArrayBuffer 内存;Chrome 98+、Firefox 97+、Safari 15.4+ 原生支持,旧环境可降级为 JSON 方案或 postMessage polyfill。structuredClone 是浏览器原生提供的深拷贝方法,能安全、高效地复制包含函数以外的大多数复杂对象(如 Map、Set、Date、RegExp、ArrayBuffer、TypedArray、Error、DOM 节点等),且自动处理循环引用,无需手动递归或第三方库。支持的数据类型与限制structuredClone 支持以下类型:普通对象、数组、Map、SetDate、RegExp、Error(拷贝后保持原型和属性)ArrayBuffer、DataView、所有 TypedArray(如 Uint8Array)BigInt、Boolean、String、Number、Symbol(仅限可序列化的 Symbol,如 Symbol.for('key'))嵌套结构和循环引用(自动识别并正确重建)不支持:函数、Promise、WeakMap、WeakSet、window、document、undefined、不可枚举属性(如某些 DOM 属性)、带有 getter/setter 的对象属性(其值不会被调用,getter 不执行)。基本用法:一行完成深拷贝直接传入源对象即可,返回一个完全独立的新对象:const original = { name: "Alice", hobbies: ["reading", "coding"], meta: new Map([["age", 30]]), created: new Date(), buffer: new Uint8Array([1, 2, 3])};<p>const clone = structuredClone(original);console.log(clone.meta === original.meta); // falseconsole.log(clone.created.getTime() === original.created.getTime()); // true(值相同,实例不同)处理 Transferable 对象(高级用法)当拷贝 ArrayBuffer 或 TypedArray 时,可通过 transfer 选项将底层内存“转移”而非复制,提升性能(尤其对大数组)。转移后原对象对应 buffer 变为 detached(不可访问): 文小言 百度旗下新搜索智能助手,有问题,问小言。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 8:19:29

【备考高项】模拟预测题(一)综合知识及答案详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】 【第2题】 【第3题】 【第4题】 【第5题】 【第6题】 【第7题】 【第8题】 【第9题】 【第10题】 【第11题】 【第12题】 【第13题】 【第14题】 【第15题】 【第16题】 【第17题】 【第18题】 【第1…

作者头像 李华
网站建设 2026/5/9 8:16:31

Blueboat性能优化秘籍:让你的JavaScript应用运行速度提升300%

Blueboat性能优化秘籍&#xff1a;让你的JavaScript应用运行速度提升300% 【免费下载链接】blueboat All-in-one, multi-tenant serverless JavaScript runtime. 项目地址: https://gitcode.com/gh_mirrors/bl/blueboat Blueboat是一个革命性的多租户无服务器JavaScript…

作者头像 李华
网站建设 2026/5/9 8:12:19

OpenSpeedy:释放游戏潜能的开源变速器,让每一秒都为你所用

OpenSpeedy&#xff1a;释放游戏潜能的开源变速器&#xff0c;让每一秒都为你所用 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾经在游戏中遇到那些令人沮丧的等待…

作者头像 李华
网站建设 2026/5/9 8:11:38

Icestudio:开源FPGA可视化设计工具入门与实践指南

1. 从零开始认识Icestudio&#xff1a;开源FPGA的可视化设计革命 如果你对FPGA&#xff08;现场可编程门阵列&#xff09;感兴趣&#xff0c;但一看到Verilog或VHDL代码就头疼&#xff0c;觉得从学习硬件描述语言到点亮一个LED的路径过于漫长&#xff0c;那么Icestudio可能就是…

作者头像 李华
网站建设 2026/5/9 8:11:25

终极CubeFS社区贡献指南:从新手到核心贡献者的完整路径

终极CubeFS社区贡献指南&#xff1a;从新手到核心贡献者的完整路径 【免费下载链接】cubefs cloud-native distributed storage 项目地址: https://gitcode.com/gh_mirrors/cu/cubefs CubeFS 作为一款云原生分布式存储系统&#xff0c;凭借其高可用、弹性扩展和多场景适…

作者头像 李华