复制,深拷贝及浅拷贝

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())可以实现深克隆递归也可以实现

具体说明上图

 

posted @ 2020-05-28 18:16  菜鸟婷婷  阅读(240)  评论(0)    收藏  举报