一、浅拷贝:仅拷贝一层,更深层次对象级别的只拷贝引用
拷贝的是地址,新旧对象指向的是同一数据,拷贝数据后改动数据会影响原数据
var obj = {
id = '1',
name:'andy'
msg : {
age:18
}
};
var o ={};
for(var k in obj){
//k为属性名 obj[k]为属性值
o[k]= obj[k];
}
o.msg.age = 20;
console.log(onj);
//var obj = {
id = '1',
name:'andy'
msg : {
age:20
}
};
ES6新增浅拷贝语法糖:Object.assign(target,…source)
Ob(ject.assign(o,obj);
console.log(o);
o.msg.age = 20;
console.log(onj);
//var obj = {
id = '1',
name:'andy'
msg : {
age:20
}
};
二、深拷贝:深拷贝拷贝多层,每一级别的数据都会拷贝。
拷贝后会重新开辟新的存储空间 。
var obj = {
id = '1',
name:'andy'
msg : {
age:18
}
color = ['blue','red']
};
var o ={};
function deepCopy(newobj,oldobj){
for(var k in oldbobj){
var item = oldobj[k];
if(item instanceof Array){
newobj[k] = [];
deepCopy(newobj[k],item)
}else if(item instanceof Object){
newobj[k] = [];
deepCopy(newobj[k],item)
}else {
newobj[k] = item;
}
}
}