对象跟数组的浅拷贝深拷贝学习
记录下这段时间开发中踩的坑,所以心血来潮在博客中备份一份,加深自己的印象。
相信很多小伙伴应该都遇到过我这种问题,如:在不改变原来的对象的时候,但是又需要改变该对象的内层对象(数据嵌套多层),这个时候该怎么办,当我第一次遇到这个问题的时候,我是有点懵逼的,本人半路入行,专业术语属实不行。下面来看个例子
如何区分深拷贝跟浅拷贝的区别:有两个数组,数组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.数组的深拷贝方法:数组遍历