浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,当修改其中任意的值,另一个值都会随之变化
代码如下:
var obj = {
id:1,
name:'zhang',
msg:{
age:18
},
color:['#f00','#0f0','#00f']
};
var o = {};
// 浅拷贝
for(var k in obj){
// k是属性名 obj 是属性值
o[k] = obj[k];
}
console.log(o);
o.msg.age = 20;
console.log(obj);
深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,两个值是互不影响的
代码如下:
var obj = {
id:1,
name:'zhang',
msg:{
age:18
},
color:['#f00','#0f0','#00f']
};
var o = {};
// 深拷贝
// 封装函数
function deepCopy(newobj,oldobj){
for(var k in oldobj){
// 判断属性值属于哪种数据类型
// 1.获取属性值 oldobj[k]
var item = oldobj[k];
// 2.判断属性值是否是数组
if(item instanceof Array){
newobj[k] = [];
deepCopy(newobj[k],item);
}else if(item instanceof Object){
// 3.判断属性值是否是对象
newobj[k] = {};
deepCopy(newobj[k],item);
}else{
// 4.属于简单数据类型
newobj[k] = item;
}
}
}
deepCopy(o,obj);
console.log(o)