JS淺拷貝和深拷貝

2021-08-25 11:22:26 字數 770 閱讀 6129

1.淺拷貝(copy)

var obj1 =

} //物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.

var obj2 = obj1;//物件,陣列之間只有引用賦值

obj2.name ="撒哈哈";

//當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝

2.深拷貝

var obj1 =

} var obj2 = new object() ;

obj2.name =obj1.name;

obj2.name =obj1.addr;

obj1.name ="撒哈哈";

//當更改obj1中key對應的value的時候,只會更改obj1的value,obj2則不會更改

兩者的本質區別:

淺拷貝在堆記憶體中,obj1和obj2指向同乙個堆,而深拷貝在建立物件時則會用

var obj2 = new object() ;//在記憶體中每次單獨建立乙個堆記憶體,所以當更改obj1的資料字段的時候並不會更改原始物件的資料字段.

※深拷貝和淺拷貝只應用於物件中.

※嚴謹點說:淺拷貝只是對指標進行拷貝,兩個指標指向同乙個記憶體塊(詳細參考windows桌面快捷方式,乙個程式的快捷方式無論多少個都指向同乙個.exe程式)

深拷貝是指對指標和指標志向的內容都進行拷貝,拷貝最後的指標式指向不同記憶體位置的指標(詳情的請見名牌的鞋子,同乙個id設計,但另乙個是高仿)

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...

js淺拷貝和深拷貝

只複製物件的引用位址,兩個物件指向同乙個記憶體位址,所以修改其中任意乙個的值,另乙個也會隨之改變,這就是淺拷貝。1.賦值 var m var n m n.a 15 console.log m.a 15m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。2.遍歷物件...