选对象拷贝方案需按场景匹配:纯数据用 json.parse(json.stringify());现代环境首选 structuredclone();高频大型拷贝或需保留构造信息用 fast-copy;老环境兜底可手写递归+weakmap。

选对象拷贝方案,关键看你要复制什么、跑在什么环境、性能要求有多高。不是越新越快越好,而是得对上实际场景。
纯数据对象:用 JSON.parse(JSON.stringify())
适合只含 null、布尔、数字、字符串、普通对象和数组的结构,比如 API 返回的配置、表单提交数据。
- 优点:原生支持,所有浏览器和 Node.js 版本都能用,写法极简,速度很快
- 缺点:会丢掉 function、undefined、Symbol、NaN、Infinity;Date 变成字符串;RegExp、Map、Set 变成空对象;遇到循环引用直接报错
- 适用场景:你明确知道数据里没有特殊类型,且不需要保留原始类型语义
现代环境首选:structuredClone()
Chrome 98+、Firefox 94+、Safari 15.4+、Node.js 17+(需启用实验标志)已原生支持,是目前最平衡的方案。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 正确处理 Date、RegExp、Map、Set、ArrayBuffer、TypedArray、Error 等内置类型
- 自动识别并安全处理循环引用,不会栈溢出或报错
- 不支持 function、undefined、Symbol —— 这些本就不能被结构化克隆,会抛 DataCloneError
- 无需引入依赖,开箱即用,比 JSON 方案更可靠
高频大型拷贝或需保留构造信息:用 fast-copy
当你要频繁深拷贝大型嵌套对象,或者必须保留自定义类实例、React 组件、包装对象(Number/String)、WeakMap/WeakSet 等时,它是当前最快最全的选择。
- 比 lodash.cloneDeep 快 2–5 倍,简单对象可达 460 万次/秒
- 支持超 15 种类型,包括 DataView、TypeError 子类、带原型链的实例
- 内置循环引用检测,提供 copyStrict() 模式保留属性描述符,createCopier() 支持定制逻辑
- 体积小(约 8KB),Tree-shaking 友好,适合长期生产使用
老环境兜底或需精细控制:手写递归 + WeakMap
仅在必须兼容 IE 或旧版 Node.js,又无法引入第三方库时才考虑手动实现。
- 核心是用 WeakMap 缓存已拷贝对象,防止循环引用导致死循环
- 需手动判断 Array、Date、RegExp、Map、Set 等类型并分别处理
- 无法还原 constructor 或非可枚举属性,功能不如 fast-copy 完整
- 代码量增加,维护成本上升,建议只用于临时过渡或特殊定制
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










