深拷貝和淺拷貝的區別及實現

2021-10-03 20:27:15 字數 765 閱讀 4882

js分兩大資料型別:

基本資料型別:number,string,boolean,undefined,null。(棧記憶體)

引用資料型別:date,function,regexp等(堆記憶體)

注意:閉包中的變數並不儲存在棧記憶體中,而是儲存在堆記憶體中。如果閉包中的變數儲存在了棧記憶體中,隨著外層中的函式從呼叫棧中銷毀,變數也會被銷毀,但是如果儲存在了堆記憶體中,記憶體函式仍能訪問外層已銷毀函式中的變數。

深拷貝:從堆記憶體中開闢乙個新的區域存放新物件,新物件跟原物件不共享記憶體,修改新物件不會改到原物件。

例如:b複製了a,修改a,b的值不改變,為淺拷貝。

淺拷貝:從棧記憶體中開闢乙個新的區域存放新物件,新物件跟原物件共享記憶體,修改新物件會改到原物件。

例如:b複製了a,修改a,b的值也發生了改變,為深拷貝。

方法一:

// 深拷貝

deepclone (obj)

if (obj && typeof obj === 'object') else

objclone[key] = obj[key]}}

}return objclone

}

方法二:

// 深拷貝2

deepclone2 (obj)

方法三:

$.extend(true,object1, object2);
slice(),push(),unshift()等方法就是拷貝。

深拷貝和淺拷貝的區別

retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,retain 是指標拷貝 淺拷貝 copy 是內容拷貝 深拷貝 ios中並不是所有的物件都支援copy,mutablecopy,遵守nscopying 協議的類可以傳送copy訊息,遵守...

深拷貝和淺拷貝的區別

一.深拷貝 源物件和副本物件是不同的兩個物件 源物件引用計數不變,副本物件計數器為1 因為是新產生的 至少有一層是物件複製 二.淺拷貝 源物件和副本物件是同乙個物件 源物件 副本物件 引用計數器 1,相當於做一次retain操作 本質 沒有產生新的物件 三.完全複製 對於被複製的物件每一層都是物件複...

深拷貝和淺拷貝的區別

深淺拷貝的區別 淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的 引用 複製到新物件中去,不把 引用的物件 複製進去,所以原始物件和新物件引用同一物件,新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。深拷貝是在引用方面不同,深拷貝就是建立乙個新的和原始欄位的內容相同...