- 浅拷贝和深拷贝只针对于像object ,Array这样的复杂对象;
- 区别 浅拷贝只复制第一层属性,深拷贝可以对对象的属性进行递归复制 详解
- 浅拷贝:就是增加了一个指针指向已存在的内容(js并没指针,帮助理解),也就是说浅拷贝只是复制了内存地址,子类指向父类属性的内存地址,当子类改变,父类也会改变。
从图中可以看出来,只要任何一方发生改变,就会改变,因为是同一个内存空间,这就是浅拷贝。
- 深拷贝:深拷贝就是增加一个指针,并申请一个新的内容,让这个新增加的指针指向这增加的内容地址,使用深拷贝,在释放内存时就不会出现释放同一段内存的错误,当我们需要复制原对象但又不能修改原对象的时候,深拷贝是唯一的选择
从上图可以看出,a 值改变不影响b值,b值改变不影响a值,首次申请是复制原有内容,然后相互独立,彼此改变互不相干。
应用场景
- 从服务器fetch到数据之后我将其存放在store中,通过props传递给界面,然后我需要对这堆数据进行修改,那设计到修改就一定有保存和取消,所以我们需要将这堆数据拷贝到其他地方
- 当你想使用某个对象的值,在修改时不想修改原对象,那么可以用深拷贝弄一个新的内存对象,像es6的新增方法都是深拷贝,所以推荐使用es6语法。