深拷贝定义:拷贝多层,每一级别的数据都会拷贝
注意点:区分数据类型的时候要先写数组,因为数组也属于对象
代码展示:
html
var o = {
id: 1,
name: 'andy',
msg: {
age: 18
},
color: [{
name: 'red'
}]
}
var kong = {};
script
function deepcopy(newobj, oldobj) {
//中心思想是遍历对象判断拿到的值是什么数据类型 数字 对象 简单数据类型
for (var k in oldobj) {
//把获取到的属性值给item
var item = oldobj[k];
//判断oldobj[k]是什么数据类型
if (item instanceof Array) {
newobj[k] = []; //等同于kong.color = [];新对象的属性值等于一个空的数组
deepcopy(newobj[k], item);
} else if (item instanceof Object) {
newobj[k] = {};
deepcopy(newobj[k], item);
} else {
newobj[k] = item;
}
}
return newobj;
}
console.log(deepcopy(kong, o));
o.color.name = 'green';修改o的内容,复制过去的内容不会跟随改变
console.log(kong);
console.log(o);