理解javascript中淺拷貝和深拷貝
阿新 • • 發佈:2018-11-28
首先,我們要知道javascript的資料型別。
javascript有兩種資料型別,基礎資料型別和引用資料型別。
基礎資料型別:儲存在棧記憶體中的簡單資料段,有undefined,boolean,number,string,null。
引用資料型別:Array,物件,Function儲存在堆記憶體空間中。
如圖所示:
a1 = 0;a2 = 'this is str';a3 = null 存放在棧記憶體中
var c =[1,2,3] 與 var d = {m:20} 變數名與記憶體地址儲存在棧記憶體中,[1,2,3]與{m:20} 作為物件儲存在堆記憶體中基礎資料型別的複製(如var a = 20 var b = a)。
引用資料型別的複製(var m = {a:10, b:20} var n = m)
m與n指向同一個記憶體空間,當m或者n改變時,另一個也跟著改變。
如m.a=80;console.log(n.a) //80
怎樣使引用資料型別有各自獨立的記憶體空間。
一、採用遞迴的方法複製物件
二、用JSON.stringify把物件轉成字串,再用JSON.parse把字串轉換成新的物件。
總結:
淺拷貝:只是複製指向某個物件的指標,而不是複製物件本身,新舊物件共享一塊記憶體;
深拷貝:複製並建立一個一模一樣的物件,不共享記憶體,修改新物件,舊物件保持不變;實現深拷貝主要有兩種方法:
(1):遞迴;
(2):JSON.stringify結合JSON.parse。
學習於公眾號《網頁前端開發學習》