淺拷貝和深拷貝的區別:是否真正獲取乙個物件的值。
值和引用:
簡單值,基本資料型別:數字、字串、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)封裝乙個深拷貝,思想:如果是基本資料型別就直接複製,如果是引用型別,就遍歷所有項,如果是基本資料型別就直接複製,如果是引用型別執行遞迴
functionclone(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...