对象跟数组的浅拷贝深拷贝学习

记录下这段时间开发中踩的坑,所以心血来潮在博客中备份一份,加深自己的印象。

相信很多小伙伴应该都遇到过我这种问题,如:在不改变原来的对象的时候,但是又需要改变该对象的内层对象(数据嵌套多层),这个时候该怎么办,当我第一次遇到这个问题的时候,我是有点懵逼的,本人半路入行,专业术语属实不行。下面来看个例子

如何区分深拷贝跟浅拷贝的区别:有两个数组,数组a = [1,2,3],假设b赋值了a,这个时候修改a,然后打印b,如果b也跟着改变了,那么就是浅拷贝,如果b没变,那么就是深拷贝

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

控制台打印的结果可以看到,我是对obj对象新增数据,为啥我打印newobj的时候数据也会发生改变,这其实就是对象的浅拷贝,接下来我们来看下数组的浅拷贝

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

这个时候我们明明是想改变obj跟arr2的值,但是原始数据源还是跟着发生了改变,这并不是我们想要的,这个时候就需要用到深拷贝。

1.对象深拷贝方法:json

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

有没有发现其实很简单而且很容易记忆,但是缺点也很大,如:在对象中如果有嵌套的函数,这个时候这个方法是不使用的,这个时候我们就需要用到递归方法了

2.对象的深拷贝方法:递归方法

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

递归方法可以实现对象跟数组的深拷贝,但是对于性能消耗要求较高

3.对象的深拷贝方法:扩展运算符

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

4.对象的深拷贝方法:ES6-object.assign

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

下面来介绍了解下数据的浅拷贝跟深拷贝,看以下例子,建议还是自己亲手测试下,这样记忆深刻

(二)数组的浅拷贝

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

这个时候我们在改变arr2的时候,arr1的值也跟着改变了,这就是典型的浅拷贝,也是平常开发中我们经常会写到的,这个时候如果想不更改数据源的情况下,就需要对数组进行深拷贝,案例如下:

1.数组的深拷贝方法:slice方法

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

2.数组的深拷贝方法:concat方法

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习

3.数组的深拷贝方法:数组遍历

对象跟数组的浅拷贝深拷贝学习对象跟数组的浅拷贝深拷贝学习