浅拷贝
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)