如何用 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(不可访问): 文小言 百度旗下新搜索智能助手,有问题,问小言。

相关推荐
@陈小鱼3 分钟前
MATLAB+Python:基于小样本卷积神经网络的 PPG 血压预测
人工智能·python·机器学习·matlab·脉搏波·血压·一维卷积神经网络
冰茶丿9 分钟前
状态机在嵌入式系统中的应用:不只是switch-case这么简单
数据库·嵌入式硬件·mongodb
卷无止境11 分钟前
Python数据进阶专题:用声明式验证让数据管道告别"惊喜"
后端·python·数据分析
AIHR数智引擎11 分钟前
15%对撞40%:WEF白皮书里的AI组织隐忧
数据库·人工智能·经验分享·职场和发展·aihr
卓怡学长17 分钟前
w261springboot基于web学校课程管理系统
java·数据库·spring boot·spring·intellij-idea
嘉泰姆半导体官方20 分钟前
CXAR41337C 双通道数字音频功放 | 2×20W | EQ+DRC | I²S | MCLK-Less - 嘉泰姆电子
前端·javascript·数据库
不坑老师35 分钟前
怎么在Word中制作汉字书写笔顺——不坑盒子汉字笔顺步骤在小学低段识字教学中的应用
前端·数据库·人工智能·word·excel·office
码云骑士37 分钟前
61-LangChain-vs-LlamaIndex-选型对比-功能矩阵-混用实践
python·线性代数·矩阵·langchain
阿豪只会阿巴43 分钟前
两小时快速入门 FastAPI--第一回
开发语言·python·fastapi
Hesionberger1 小时前
动态规划与二分法破解最长递增子序列
java·数据结构·python·算法·leetcode