递归函数在深拷贝有用到
// - obj1和obj2必须都是对象才能使用 function copy (obj1, obj2) { for (var k in obj1) { // 根据属性值得类型,需要进行不同的操作 if (typeof obj1[k] === 'object' && obj1[k] !== null) { // 如果对象的某个属性值也是复杂数据类型,同样需要进行遍历拷贝操作 // 如果希望将obj1[k]的属性拷贝给obj2[k],obj2[k]首先需要是一个对象 // obj2[k] = {}; // 先设置为对象后,再将obj1[k]的属性进行拷贝
// - 设置时需要考虑,数据到底是数组还是对象形式,再进行对应的创建
obj2[k] = obj1[k] instanceof Array ? [] : {};
copy(obj1[k], obj2[k]);
} else {
// 这种直接赋值的方式只适用于属性值为基本数据类型的情况
obj2[k] = obj1[k];
}
}
}
copy(obj1, obj2);
/* obj1.aiHao.swim = '我喜欢蛙泳';
obj1.aiHao.eat.xiHongShi = '我喜欢吃西红柿炒鸡蛋'; */
console.log(obj1, obj2);