浅拷贝
- for… in… 循环
var a={
name:'zxx',
age:123456,
arr:[1,2,3],
ob:{new:'zxxx'}
}
var b={}
for(var k in a){
b[k]=a[k];
}
2.Object.assgin(),与=号区别在于,=修改了a.name就会变化,而这个不会变,但是这个到下面一层也会变化!就是说等号只进行了一层深拷贝。
var a={
name:'zxx',
age:123456,
arr:[1,2,3],
ob:{new:'zxxx'}
}
var b=Object.assign({},a)
如果b原来是有属性的对象,并且同名的话,会被a的属性覆盖
var a={
name:'zxx',
age:123456,
arr:[1,2,3],
ob:{new:'zxxx'}
}
var b={
name:'qqq',
age:1234,
}
b=Object.assign(b,a)
3.扩展运算符
4.loadsh库
深拷贝
1.用json的方法(方法对于undefined和function不进行任何拷贝)
var a={
name:'zxx',
age:123456,
arr:[1,2,3],
ob:{new:'zxxx'}
}
var b=JSON.parse(JSON.stringify(a))
2.用for…in…+递归
var a={
name:'zxx',
age:123456,
arr:[1,2,3],
ob:{new:'zxxx'}
}
var b={}
function deepcopy(newobj,oldobj){
for(var k in oldobj){
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;
}
};
}
deepcopy(b,a)
3.loadsh库