深拷貝與淺拷貝

2021-10-21 20:20:07 字數 813 閱讀 6071

淺拷貝就是把原物件的每乙個屬性名的屬性值都直接賦值給新的物件

cloneobj[i] = obj[i]

function

shallowclone

(obj)

;for

(let i in obj)

return cloneobj;

}

淺拷貝的值 對於基本型別的拷貝會被正常的拷貝 但是對於引用型別的值 只會拷貝位址 也就是說 這兩個物件指向的其實是同乙個值

對於深拷貝 要對屬性值的型別做判斷 對於那些基本型別的屬性的直接賦值就好了 對於那些引用型別的屬性 要進行遞迴

即其實深拷貝可以拆分成 2 步,淺拷貝 + 遞迴,淺拷貝時判斷屬性值是否是引用型別的屬性,如果是引用型別的屬性就進行遞迴操作,兩個一結合就實現了深拷貝。

深拷貝拷貝出來的物件 與原來的物件沒有任何關係

首先判斷這個是否為物件 用typeof來判斷 記得typeof是寫在前邊 然後裡面的o沒有大寫 等於的那個值要加引號 要大寫首字母

如果是物件的話 首先要看這個obj的constructor是否等於array(不加引號)如果是的話賦值為【】否則賦值為{}

接下來就用for in 遍歷obj的每乙個屬性名 每乙個都判斷屬性(typeof) 如果是引用型別的屬性 就再次呼叫深拷貝方法 如果不是直接賦值

function

deepcopy

(obj)

;for

(var i in obj)

}else

return result;

}

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...