淺拷貝與深拷貝的實現
阿新 • • 發佈:2021-02-03
技術標籤:objectshadowcopyjsjavascript
淺拷貝與深拷貝概述:
1.淺拷貝只是拷貝一層,更深層次物件級別只拷貝引用;
2.深拷貝拷貝多層,每一級別的資料都會拷貝;
淺拷貝的程式碼實現:
var obj = {
id:1,
name:'andy',
//淺拷貝只能將msg的地址拷貝給物件
msg:{
age:18,
}
};
//遍歷物件實現淺拷貝
var o = {};
for(var k in obj) {
//k是屬性名
o[k] = obj[k];
}
//Object assign(target,...source) es6新增方法可以淺拷貝
Object (o,obj);
//修改
深拷貝的程式碼實現:
var obj = {
id:1,
name:'andy',
//淺拷貝只能將msg的地址拷貝給物件
msg:{
age:18,
}
};
//深拷貝拷貝多層
//封裝函式
function deepCopy(newObj,oldObj) {
for(var k in oldObj) {
//1.獲取屬性值
var item = oldObj[k];
//2.判斷這個值是否是陣列
if(item intanceof Array) {
newObj[k] = [];
deepCopy(newObj[k], item);
//判斷這個值是否是物件(一定要先判斷是否是陣列,因為陣列也是物件)
} else if(item intanceof Object) {
newObj[k] = {};
deepCopy(newObj[k], item)
} else (
newObj[k] = item;
)
}
};
deepCopy(newObj,obj);