- 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。
- 深拷贝拷贝多层,每一级别的数据都会拷贝。
1.浅拷贝(深一层的msg就只是地址引用,修改obj的msg和o的msg会一起修改)
var obj = {
id:1,
name:'andy',
msg:{
age:18
},
color:['pink','red']
}
var o = {};
for(var k in obj){
// k 是属性名 obj[k]是属性值
o[k] = obj[k];
}
console.log(o);
o.msg.age = 20;
console.log(obj); //obj.msg.age也被修改为20
es6的浅拷贝语法糖:Object.assign()
Object.assign(o,obj);
console.log(o);
2.深拷贝:
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);
}
// 3.判断这个值是否是对象
else if(item instanceof Object){
newobj[k] = {};
deepCopy(newobj[k],item);
}
// 4.属于简单数据类型
else{
newobj[k] = item;
}
}
}
deepCopy(o,obj);
obj.msg.age = 100;
console.log(o) //o.msg.age没有修改,还是18