直接步入主题
浅拷贝:
1、只是拷贝了对象的引用地址,和被拷贝的对象共用同一个引用地址,所以改变任何一个对象内容,另外一个也会跟着改变。(图1)
2、当对象中有引用数据类型的时候,其引用地址没有变化的时候,修改任何对象的引用对象的内容也会相互影响(图2)
深拷贝:
把被拷贝的对象的全部内容(包括其中引用数据类型的地址)赋值到不同引用地址的对象 ,即拷贝后所有的引用地址都改变,所以改变任何一个对象的所有内容都不会相互影响(图3)
如何辨别是否是深浅拷贝:判断拷贝后的数据与被拷贝数据其中所有的引用地址是否改变
浅拷贝的方法:
1、= 赋值引用地址 2、Object.assign() 3、数组的slice方法 4、数组concat方法 5、数组Array.from方法 6、扩展运算符... 除第一种其余的可以拷贝只有一层的对象或者数组
深拷贝的方法:
1、递归方案 (其实就是通过循环一层一层的进行拷贝) 后续补充此方法
2、JSON.parse(JSON.stringify())方法 这个方案简单易懂,不过也有缺点,对于 undefined、function、symbol 会在转换过程中被忽略
3、自己手动写 适合数据简单情况