1. 程式人生 > 其它 >淺拷貝與深拷貝的實現

淺拷貝與深拷貝的實現

技術標籤: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);