浅拷贝
<script>
var obj={
name:'bob',
age:18
}
var o={};
for(var k in obj)
{
o[k]=obj[k];
}
console.log(o);
</script>
新拷贝出来的对象o中的msg和obj中的msg公用一个地址
深拷贝
<script>
var obj={
age:20,
name:'tom',
msg:{
height:50
},
color:['pink','red','blue']
}
var o={}
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(o,obj);
o.msg.height=99;
console.log(o);
console.log(obj);
</script>
- 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用
- 深拷贝拷贝多层,每一级别的数据都会拷贝
- Object.assign(target,…sources) ES6新增方法可以浅拷贝