对象的深拷贝

概念介绍:
浅拷贝:拷贝的是源对象的地址值,源对象的值发生改变时,拷贝对象的值也会发生改变。
深拷贝:深拷贝则是拷贝了源对象的所有值,源对象的值发生变化时,拷贝对象的值不会改变。
未重写的object.clone()方法,如果对象是基本数据类型(Integer,String),此方法拷贝的是其值,如果对象是引用数据类型,此方法拷贝的是地址值。

对象深拷贝是将对象从内存中完整地拷贝一份出来,在堆内存中开辟一个新的区域来存放新对象,修改新对象不会影响原对象[^2]。 ### 实现方法 - **JSON.parse(JSON.stringify(obj))**:这是一种较为简单的深拷贝方法,利用 JSON 的序列化和反序列化来实现对象深拷贝。但这种方法有局限性,它不能处理函数、正则表达式等特殊对象,并且会忽略对象的不可枚举属性和 Symbol 类型的属性[^2]。 ```javascript const originalObj = { name: 'John', age: 30 }; const clonedObj = JSON.parse(JSON.stringify(originalObj)); ``` - **自定义实现函数**:如 `deepClone(originValue, map = new WeakMap())` 函数,参数 `originValue` 是要进行深拷贝的原始对象,`map` 参数是一个 `WeakMap` 用于存储已经复制过的对象,以防止循环引用[^5]。 ```javascript function deepClone(originValue, map = new WeakMap()) { // 实现深拷贝的具体逻辑 } ``` - **第三方工具**:以 Java 为例,Apache Commons Lang 库提供的 `SerializationUtils.clone()` 方法,可以对对象进行深拷贝[^4]。 ```java import org.apache.commons.lang3.SerializationUtils; public class DeepCopyExample { public static void main(String[] args) { // 假设 obj 是要拷贝的对象 Object obj = new Object(); Object clonedObj = SerializationUtils.clone(obj); } } ``` ### 原理 深拷贝的核心原理是递归地遍历对象的所有属性,对于基本类型的属性,直接复制其值;对于引用类型的属性,需要在堆内存中开辟新的空间,创建一个新的对象,并递归地对这个新对象的属性进行深拷贝,从而实现对象的完整复制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值