1. 个人粗浅理解
两个对象A、B, A有数据 B为空,B复制了A,我们修改A,如果B中的数据跟着变化了,
那就是浅拷贝,如果没有变化,那就是深拷贝。说明B另开辟了一块内存。
2. 基础的了解
基本数据类型:number,string,boolean,null,undefined,symbol等;
引用数据类型:object({}对象,数组[]),function函数等;
因为拷贝是对数据进行操作,所以我们得了解一下这两类的数据存储方式;
基本数据类型一般存储在栈中;引用数据类型一般存放在堆中;
3. 更深的理解
JavaScript存储对象都是存地址的,所以浅拷贝会导致 A 和 B 指向同一块内存地址。
改变了其中一方的内容,都是在原来的内存上做修改会导致拷贝对象和源对象都发生改变,
而深拷贝是开辟一块新的内存地址,将原对象的各个属性逐个复制进去。
对拷贝对象和源对象各自的操作互不影响。
4. 举个例子(Object.assign())
Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
但是 Object.assign()进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

注意:当object只有一层的时候,是深拷贝
