新闻中心
J*aScript深浅拷贝实现_对象复制方案
深拷贝能完全复制对象及嵌套属性,避免引用共享;浅拷贝仅复制一级属性,嵌套对象仍共享内存。1. 浅拷贝用Object.assign或扩展运算符,无法隔离嵌套引用;2. 深拷贝可用JSON方法(限纯数据)或递归实现(支持Date、RegExp、循环引用等);3. 实际推荐:简单场景用JSON,复杂类型用手写递归或Lodash的cloneDeep。

J*aScript中对象和数组的复制不是简单的赋值就能解决的,因为引用类型的数据存储的是地址,直接赋值会导致多个变量指向同
一个内存空间。改变其中一个,其他变量也会受到影响。为了解决这个问题,就需要用到深拷贝和浅拷贝。
浅拷贝实现方式
浅拷贝是指创建一个新对象,这个对象有着原始对象属性的一级副本。如果属性是基本类型,拷贝的就是值;如果是引用类型,拷贝的则是内存地址。
常见实现方法:- Object.assign():可将多个源对象的所有可枚举属性复制到目标对象
- 扩展运算符(...):语法简洁,适用于对象和数组
- 手动遍历赋值:适合简单场景,逐个复制属性
示例:
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = Object.assign({}, obj1);
// 或 const obj2 = { ...obj1 };
obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,说明b是引用共享
可见,浅拷贝无法处理嵌套对象的独立复制。
深拷贝实现方式
深拷贝会递归地拷贝所有层级,确保新对象与原对象完全独立,互不影响。
常用方法包括:- JSON.stringify + JSON.parse:简单快捷,但有局限性
- 递归实现:可控性强,能处理复杂类型
- 借助第三方库(如 Lodash):功能完整,兼容性好
方法一:JSON 方法(适用于纯数据对象)
来画数字人|直播|
来画数字人自动化|直播|,无需请真人主播,即可实现24小时|直播|,无缝衔接各大|直播|平台。
57
查看详情
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.b.c = 3;
console.log(obj1.b.c); // 输出 2,成功隔离
限制:不能处理函数、undefined、Symbol、Date、RegExp 和循环引用。
方法二:手写递归深拷贝
function deepClone(target, map = new WeakMap()) {
if (target === null || typeof target !== 'object') return target;
// 处理日期
if (target instanceof Date) return new Date(target);
// 处理正则
if (target instanceof RegExp) return new RegExp(target);
// 防止循环引用
if (map.has(target)) return map.get(target);
const clone = Array.isArray(target) ? [] : {};
map.set(target, clone);
for (let key in target) {
if (Object.prototype.hasOwnProperty.call(target, key)) {
clone[key] = deepClone(target[key], map);
}
}
return clone;
}
这个版本支持对象、数组、Date、RegExp,并使用 WeakMap 避免循环引用问题。
实际应用建议
根据使用场景选择合适方案:
- 若对象结构简单且只包含基本类型或普通对象数组,用 JSON 方法最快
- 需要完整支持各种类型时,推荐使用 递归 + WeakMap 实现
- 项目中频繁使用,可引入 _.cloneDeep 等成熟工具
基本上就这些,掌握原理后可以根据需求灵活调整实现方式。不复杂但容易忽略细节,比如循环引用和特殊对象处理。
以上就是J*aScript深浅拷贝实现_对象复制方案的详细内容,更多请关注其它相关文章!
# 的是
# 传统行业微信推广营销
# 湖南SEO优化设计软件
# 宿州网站推广效果
# 昌乐网络营销推广费用
# 360精准营销推广助手
# 网站seo关键字优化
# 中小型网站建设教学设计
# 黄山区品牌网站推广技巧
# 利用问答网站进行推广
# 中原短视频营销推广渠道
# 也会
# 加载
# javascript
# 按需
# 点对点
# 适用于
# 多个
# 运算符
# 如何实现
# 递归
# 工具
# json
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
Django模型中自动计算可用余额的实现方法
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
怎么在mac上运行html代码_mac运行html代码方法【指南】
excel怎么制作工资条 excel快速生成工资条的方法
深入理解J*a合成构造器:何时以及为何阻止其生成
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
抖音网页版快捷访问 抖音网页版网页版入口操作教程
c++ 命名空间怎么用 c++ namespace使用指南
高德地图公交到站提醒失败如何解决 高德提醒权限设置
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
必由学网页版入口 必由学官方平台直接访问
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
jQuery Mask 插件中实现电话号码固定前导零的教程
微博网页版官方账号登录 微博网页版内容浏览使用指南
QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问
Win11怎么开启省电模式_Win11电池节电模式自动开启
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
Go语言HTML解析:利用Goquery精准获取指定元素内容
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
PostgreSQL海量数据高效导入策略:Python与Django实践指南
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
AO3网页版最新入口合集 Archive of Our Own在线访问指南
C++ explicit关键字防止隐式转换_C++构造函数安全规范
如何将HTML表格多行数据保存到Google Sheet
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
拼多多赚钱渠道_拼多多收益来源
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
星露谷物语官网入口 星露谷物语游戏官网入口
b站赚钱渠道_b站收益来源
理解J*aScript Promise的微任务队列与执行顺序
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
J*aScript中安全有效地处理localStorage字符串数据
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
J*aScript DOM操作:高效清空列表元素的策略与实践
在python-socketio事件处理器中安全访问Flask应用上下文
PySpark中从现有列右侧提取可变长度字符创建新列的教程
基于动态规划的房屋花卉种植最小成本算法详解
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
age动漫网站入口 age动漫官网直接访问入口
漫蛙网页登录入口 漫蛙漫画官方授权网址


2025-11-29
浏览次数:次
返回列表