1. 程式人生 > >理解javascript中淺拷貝和深拷貝

理解javascript中淺拷貝和深拷貝

首先,我們要知道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。

學習於公眾號《網頁前端開發學習》