区别:
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
实现方式:
浅拷贝:
(1)Object.assign()
var obj = {a:{a:"kobe",b:39}};
var obj1 = Object.assign({},obj);
obj1.a.a="wade";
console.log(obj.a.a);
// wade
(2)Array.prototype.concat()
let arr = [1,3,{username:'kobe'}];
let arr2 = arr.concat();
arr2[2].username = 'wade';
console.log(arr);
(3)Array.prototype.slice()
let arr = [1,3,{username:'kobe'}];
let arr3 = arr.slice();
arr3[2].username = 'wade';
console.log(arr);
深拷贝:
(1)JSON.parse(JSON.stringify())
let arr = [1,3,{username:'kobe'}];
let arr4 = JSON.parse(JSON.stringify{arr});
arr4[2].username = 'duncan';
console.log(arr,arr4);
(2)手写递归方法:递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝