數組深拷貝的幾種方法


一、深拷貝的意義

  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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM