一、深拷貝的意義
Js五種基本類型才可以用‘=’來進行直接拷貝,其余引用類型不能直接用‘=’來進行拷貝。
1 let a = [1,2,3,4]; 2 let b = a; 3 a[0] = 5; 4 console.log(b);//[5,2,3,4],b[0]的值也變了
引用類型用‘=’只是引用堆中的地址,當內存棧中的值發生改變,其值也跟着改變,為了避免這種情況發生,就有了深拷貝。
二、數組深拷貝的方法
深拷貝的核心思想就是將引用類型展開成基本類型,再進行拷貝。
1.遍歷(僅限於一層,數組的item是基本類型)
1 let a = [1,2,3,4]; 2 let b = []; 3 a.forEach(item=>{ 4 b.push(item) 5 }); 6 console.log(b);//拷貝后a和b的值相同 7 a[0] = 5; 8 console.log(b);//即使改變a的值,b的值也不會發生改變
2.ES6展開符...(僅限於一層,數組的item是基本類型)
1 let a = [1,2,3,4]; 2 let b = [...a]; 3 console.log(b); 4 a[0] = 5; 5 console.log(b);
3.concat()函數
1 let a= [1,2,3,4]; 2 let b = a.concat(); 3 console.log(b); 4 a[0] = 5; 5 console.log(b);