知識點彙總 深拷貝和淺拷貝

2021-09-26 09:19:07 字數 954 閱讀 1666

淺拷貝:拷貝指標

深拷貝:複製乙個新的物件,兩個記憶體,修改其中乙個物件並不會影響另乙個物件

通過遞迴實現

// 淺拷貝

function copy(target,source)

copy(target[item],source[item])

}target[item] = source[item]

}return target

}

通過json.stringify和parse方法來實現

function deepclone(obj)
通過jquery的extend實現

$.extend( [deep ], target, object1 [, objectn ] )

deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝

targetobject型別 目標物件,其他物件的成員屬性將被附加到該物件上。

object1  objectn可選。 object型別 第乙個以及第n個被合併的物件。 

let a=[0,1,[2,3],4]

let b=$.extend(true,,a)

object.defineproperties (定義屬性)、object.getownpropertydescriptors(es2017,獲取物件的多個屬性)

防止改變乙個物件導致其他物件也跟著變化

concat

slice

object.assign

C 知識點 物件深拷貝和淺拷貝

一 概念及原理 物件拷貝的目的是進行物件的複製,也就是將乙個物件裡面的資料完整的複製到乙個新的相同型別的物件中。由於物件中資料的儲存針對不同的資料型別儲存方式的不同,從而導致出現兩種資料拷貝的情況。c 中資料分為值型別和引用型別,對於值型別直接存的對應的值,再複製過程中直接複製對應值即可。對於引用型...

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...