js實現淺拷貝和深拷貝


js類型有兩種,一種是基本數據類型(null,undefined,Boolen,string,number,)和引用數據類型(array,object);

這兩種數據類型數據存放在另個不同的地方;基本數據類型在棧中,引用數據類型的值存在堆中,而他的值得地址會存在棧中。

當我們在直接賦值的時候賦值的是地址。

const  a = {a:'haha'}

const b = a;

當 我們修改b中的值得時候 a 中的值也會隨之發生改變;

 

 這就是因為我們直接賦值的時候賦值的是存在棧中的地址。他們都是指向同一個堆里的數據;b變化,a也就變化;

但是有時候我們不想讓a也發生變化,這時就會用到深拷貝和淺拷貝;

這里首先講一下淺拷貝;

 

 這是我們發現,當arr變化並不會導致arr1變化;

接下來請睜大你的眼睛繼續看下去;

 

 同樣是一份淺拷貝,但是當arr2中的是一個對象的時候,arr2的變化也會導致arr3的變化;

淺拷貝:對對象地址的復制,不會進行遞歸復制,並沒有開辟新的棧,也就是復制的結果是兩個對象指向同一個地址。

而深拷貝是將原對象和屬性一起賦值出去,復制到一份新的內存當中;二者不會有關聯;

深拷貝最常用的方法:JSON.parse(JSON.stringfiy());

 

 這里arr1中的a對象並不會發生改變;

但是如果對象中含有function則會出現問題;

淺拷貝方法還有以下幾種; Array.from(), Array.slice(),Object,assigin({},[]),


免責聲明!

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



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