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

相关推荐
qq_3164110311 分钟前
AI 情感陪伴智能潮玩软硬件一体化开发案例
人工智能·python
废弃的小码农16 分钟前
功能测试--Day07--Python编程基础
开发语言·python
zx11545022 分钟前
大模型工具调用次数限制
人工智能·python
Lethehong1 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客1 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
大数据魔法师2 小时前
Python 网络请求库 curl_cffi:从入门到实战,如何规避网站指纹检测
python·数据分析
中电华星2 小时前
专业的工业电源公司
网络·python
枫叶v.2 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
数据库·安全·prompt
Lucky_Turtle2 小时前
【Milvus】向量数据库
数据库
databook2 小时前
用统计检验来确定“重要特征”
python·机器学习·scikit-learn