JS模擬實現物件的深拷貝

2021-10-10 03:30:53 字數 469 閱讀 9631

(1)js中淺拷貝與深拷貝對應,是由js的原始資料型別和引用資料型別決定的。

(2)對於原始型別資料,它的值存放在棧記憶體中,對於引用型別資料,它的棧中僅儲存了乙個資料存放的位址,真正的資料存放在堆記憶體中。

(3)當我們對原始型別資料進行賦值操作時,將棧記憶體中的值賦值給了被賦值物件,對被賦值物件進行運算並不對原始值產生***。當對引用型別資料進行賦值時,將棧中的存放的資料位址賦值給被賦值物件,被賦值物件指向同樣的堆記憶體,修改被賦值物件對原物件產生***。

function

copy

(obj1,obj2);}

for(

let attr in obj1)

else;}

copy

(obj1[attr]

,obj2[attr]);

}else}}

return obj2;

}

js物件深拷貝

由於引用型別 陣列 物件 是按位址傳遞,直接拷貝是淺拷貝,即修改拷貝後的變數,原變數也會改變。有時需要深拷貝乙個物件,這時就需要遍歷徹底複製,使原物件和拷貝物件完全脫離關係。function deepcloneobj obj for i in obj return o 實現細節 假定傳入的是乙個引用...

js 物件深拷貝 關於JS深拷貝的學習

看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...

js物件的深拷貝

關於物件的深拷貝一直是大家津津樂道乙個話題,本騷年通過研究 yuedu 發現還是很easy的。首推的方法簡單有效,json.stringfy 和json.parse 即可搞定。但是這種簡單粗暴的方法有其侷限性。當值為undefined function symbol會在轉換過程中被忽略。所以,物件值...