浅度拷贝:
复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。
1、Object.assign方法
2、直接用=赋值
深度拷贝:
重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本类型。两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
1、JSON对象的parse和stringify可以实现深度拷贝
JSON对象是ES5中引入的新的类型(支持的浏览器为IE8+),JSON对象parse方法可以将JSON字符串反序列化成JS对象,stringify方法可以将JS对象序列化成JSON字符串,借助这两个方法,也可以实现对象的深拷贝。
var obj = {a: 1, b: 2, c: { a: 3 },d: [4, 5]}
var obj1 = obj //浅拷贝
var obj2 = JSON.parse(JSON.stringify(obj))//深拷贝常用方法
2、Array的slice和concat方法
数组内部属性值如果是基本类型,那就是深拷贝。
数组内部属性值如果是引用对象,使用slice和concat对象数组的拷贝,整个拷贝还是浅拷贝。