深拷贝浅拷贝

228 阅读1分钟

浅拷贝

1.浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用

Object.assign(target,sources)  // es6新增方法可以浅拷贝
var obj = {
	id:1,
	msg:{
		age:18
    }
};
var 0 = {};
// for in可实现浅拷贝
for(var k in obj){
	// k是属性名 obj[k] 属性值
	o[k] = obj[k]
}
console.log(o);

浅拷贝只是把更深层次的对象的地址拷贝给了o,o和obj指向的是同一个数据,修改了其中任何一个数据,都会影响另外一个数据(及它俩所指向的内存地址是一样的)

深拷贝

2.深拷贝拷贝多层,每一级别的数据都会拷贝

拷贝出来的数据单独暂居一个空间,并不会影响原来的数据

var obj = {
	id: 1,
	name: 'andy',
	msg: {
		age: 18
	},
	color: ['pink','red']
};
var o = {};
// 递归
function deepCopy(newObj, oldObj){
	for(var k in oldObj){
		//1. 获取属性值 oldObj[k]
		var item = oldObj[k];
		//2.判断这个值是否是数组
		if(item instanceof Array){
			newObj[k] = [];
			deepCopy(newObj[k], item)
		} else if (item instanceof Object){
			//3.判断这个值是否是对象
			newObj[k] = {};
			deepCopy(newObj[key], item)
		} else {
			// 4.属于简单数据类型
			newObj[k] = item;
		}
	}
}
deepCopy(o, obj)