复制,深拷贝及浅拷贝
1.复制
let arr1 = [1,{a:1},4];
let arr2 = arr1;
arr1[1].a = 2;
console.log(arr2) //[1,{a:2},4] arr1修改的元素为引用数据类型 arr2的元素值改变
arr1[2] = 3;
console.log(arr2) //[1,{a:2},3] arr1修改的元素为基本数据类型 arr2的元素值也改变
console.log(arr1 === arr2); //true 指向的是同一地址
2.浅克隆
let arr1 = [1,{a:1},4];
let arr3 = arr1.concat();
arr1[1].a = 2;
console.log(arr3); //[1,{a:2},4]; arr1修改的元素为引用数据类型 arr3的值也会改变
arr1[2] = 3;
console.log(arr3); //[1,{a:2},4]; arr1修改的元素为基本数据类型 arr3的值不会改变
console.log(arr1 ===arr3); //false 指向的不是同一地址
除了concat可以实现浅克隆,es6的扩展运算符(...)也可以实现
3.深克隆
let arr1 = [1,{a:1},4];
let arr4 = JSON.parse(JSON.stringify(arr1));
arr1[1].a = 2;
console.log(arr4) //[1,{a:1},4] arr1修改的元素为基本数据类型 arr4的值不会改变
arr1[2] = 3;
console.log(arr4) //[1,{a:1},4] arr1修改的元素为原始数据类型 arr4的值也不会改变
console.log(arr1 ===arr4); //false 指向的不是同一地址
除了JSON.parse(JSON.stringify())可以实现深克隆,递归也可以实现
具体说明上图


浙公网安备 33010602011771号