浅拷贝和深拷贝
1、浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用。
2、深拷贝拷贝多层,每一级别的数据都会拷贝。
浅拷贝:
浅拷贝拷贝复杂数据只会拷贝地址,而不是直接拷贝一份数据开辟一个新的空间:
如果我们对拷贝后的数据进行修改,我们拷贝前的数据也会进行改变!
var obj={
id:1,
name:'one',
msg:{
age:18
}
}
var o = {};
Object.assign(o , obj);
o.msg.age = 23;
console.log(obj);
我们会发现打印出来的obj的msg里面的age也变成了23
深拷贝
深拷贝拷贝复杂数据会新开辟一个空间,和原来的数据互不影响!
我们可以用函数递归的形式来进行深拷贝!
var obj={
id:1,
name:'one',
msg:{
age:18
},
clock:['pick','red','yeelow']
}
var o = {};
function deepCopy(newobj,olobj){
for (var k in olobj){
var item = olobj[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)
console.log(o);
o.msg.age = 22;
console.log(obj);