1.浅拷贝
<script>
//浅拷贝的对象,在改变其属性值后,原对象也会发生改变
var data = {
id: 1,
item: '苹果',
msg:{
price: 18,
address: 'cn'
}
}
var obj = {};
console.log('---------浅拷贝方法1---------');
for(var k in data){
// k代表属性名,data[k]代表属性值
obj[k] = data[k];
}
console.log(obj); //此时修改data的msg内容,obj内容也会发生对应变化
console.log('---------浅拷贝方法2---------');
Object.assign(obj,data) //语法糖
console.log(obj); //此时修改data的msg内容,obj内容也会发生对应变化
</script>
2.深拷贝
<script>
// 深拷贝拷贝的对象能够独立于原对象存在,即在内存中新开辟了地址空间
var data = {
id: 1,
item: '苹果',
msg:{
price: 18,
address: 'cn'
},
color:['red','green','yellow']
}
function deepCopy(newObject,oldObject){
for(var k in oldObject){
//获得oldObject的属性值
var value = oldObject[k];
//判断value的属性类型,如果是对象和数组就递归拷贝,如果是简单数据类型就直接浅拷贝
//1.判断value是否是数组
if(value instanceof Array){
newObject[k] =[];
deepCopy(newObject[k],value);
}
else if(value instanceof Object){
//2.判断value是否是对象
newObject[k] ={};
deepCopy(newObject[k],value);
}else{
//3.拷贝简单数据类型
newObject[k] = value;
}
}
}
var o = {}
deepCopy(o,data);
console.log(o);
</script>