关于数组对象的深拷贝和浅拷贝

当我们复制一个基本数据类型的数据时,是新建一个数据同时存放到栈内存中,而当我们复制一个引用数据类型时,是复制这个引用数据类型的地址,存放到栈内存中,此时堆内存中并没有任何变化

这就引发了浅复制和深复制

关于深浅复制,虽然早就看过相关的博客文章,但是真正遇到的时候,依然忘记了往这上面找原因,导致浪费了些时间,所以我又重新了解了一下深浅复制的原因及深复制的方法。具体的原理大家应该都清楚,在这里我就不详细说了。

一,引发浅复制的操作

例如,push,直接赋值等

二,深复制的方法如下:

1.JSON.parse(JSON.stringify(xx)),进行深复制;先将数组或对象字符串化,这样就可以切断指针联系
const arrayA = [1,2]
const arrayB = JSON.parse(JSON.stringify(arrayA))
复制代码
!Object.assign({},obj)(貌似没用,只是一级属性复制,比浅拷贝多了一层而已,但是达不到深拷贝)
2. concat()
const arrayA = [1,2]
const arrayB = arrayA.concat();
复制代码
3. 扩展运算符
const arrayA = [1,2]
const arrayB = [...arrayA];
const [...arrayB] = arrayA;
复制代码
4. 递归处理
function deepClone(data) {
	var str, obj = data.constructor === Array ? [] : {};
	if (typeof data !== 'object') {
		return data;
	} else {
		for (var i in data) {
			obj[i] = typeof data[i] === 'object' ?
				deepClone(data[i]) : data[i]; 
		}
	}
	return obj;
};
复制代码

转载于:https://juejin.im/post/5a915e026fb9a0634514d55b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值