淺拷貝與深拷貝

2022-09-19 05:27:10 字數 1314 閱讀 9602

淺拷貝和深拷貝的區別:是否真正獲取乙個物件的值。

值和引用:

簡單值,基本資料型別:數字、字串、null、undefine、symbol。簡單值通過複製的方式來複製和傳遞。

引用值,引用型別:物件、陣列、函式。引用值指向值本身而非變數。

使用值引用還是值複製由值的型別決定。

1.淺拷貝

object.assign(obj,obj2)  //合併兩個物件

(...)擴充套件運算子

let obj1 =

let obj2 =

let obj3 =object.assign(obj1, obj2)

let obj4 =

obj1.name = "zaiia"console.log(obj3);

// console.log(obj1); //

console.log(obj4); //

2.淺拷貝的實現

1)

//

1.json.parse(json.stringify(obj))

將物件解析為字串

將字串轉為物件

function

clone(obj)

let obj =

}console.log(clone(obj));

2)

//

2.使用lodash庫的clonedeep()方法

//用法:clonedeep(value) value為要拷貝的值

var obj =

var copy =_.clonedeep(obj)

obj.name = 'hu'console.log(obj, copy);

3)封裝乙個深拷貝,思想:如果是基本資料型別就直接複製,如果是引用型別,就遍歷所有項,如果是基本資料型別就直接複製,如果是引用型別執行遞迴

function

clone(obj)

if (typeof obj === "object")

else}}

return

newobj

}let obj1 =

//測試

let obj2 =clone(obj1)

obj2.name = "hu",

console.log(obj1);

// console.log(obj2); //

「淺拷貝」與「深拷貝」

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...