首先,关于对象的浅拷贝,相当于只拷贝最外一层,对于深层次对象,只拷贝地址
接下来将以这个代码案例来讲解对象的浅拷贝
var obj ={
id:'01',
msg:{
sex:'m',
}
}
var o = {};
for(var key in obj){
o[key]=obj[key];
}
//第一种
o.id='02';
//第二种
// o.msg.sex='w';
//第三种
// o.msg = {age:'one'};
console.log('对象o');
console.log(o);
console.log('对象obj');
console.log(obj);
第一种情况如图:
改变了对象o的id值
内存示意图
第二种情况,因为浅拷贝只赋地址值,所以改变msg中属性,则把原对象的msg属性也改变了
内存示意图:
第三种为容易出错的一种,改变了msg对象,这里改变的是第一层的值,所以会开辟一个新的内存空间,而不会改变obj中msg的值,因为对象的浅拷贝会把第一层拷贝下来,所以改变id和改变msg是一个意思,这与改变msg中属性要区分开来。
内存示意图