首页 新闻 搜索 专区 学院

浅拷贝的问题

0
悬赏园豆:5 [已解决问题] 解决于 2020-11-23 15:12

为什么我的浅拷贝能实现深拷贝的效果?
如图,改变obj2的k2和k3属性,obj1完全不受影响啊!!!

function shallowClone(obj){
	let newObj = {};
	for(const key in obj){
		newObj[key] = obj[key];
	}
	return newObj;
}
			
let obj1 = {
	k1:123,
	k2:{name:'k2'},
	k3:[1,2,[3,4]]
};
let obj2 = shallowClone(obj1);
obj2.k2 = {};
obj2.k3 = [1,2,3,4];
console.log(obj1);
console.log(obj2);

一路南风的主页 一路南风 | 初学一级 | 园豆:198
提问于:2020-11-23 14:18
< >
分享
最佳答案
0

我懂了,是我检验的方式出现了问题。修改的不应该是变量的引用,而是引用的那个对象中的属性值

一路南风 | 初学一级 |园豆:198 | 2020-11-23 15:11
其他回答(2)
0

shallowClone(obj1);这个方法获取的obj是跟obj1没关系的东西,如果obj2=obj1,这样就有关系了

收获园豆:5
华临天下 | 园豆:1454 (小虾三级) | 2020-11-23 14:48
0

修改对象中对象的属性值,因为对象引用在栈内存,浅拷贝不受影响,实际的对象存在于堆内存,才受到深浅拷贝影响

佛系小萌新 | 园豆:210 (菜鸟二级) | 2021-04-02 21:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册