function copy(obj) {
var newObj = {};
for (var key in obj) {
// 判断遇到复杂数据类型的时候 进行递归再次遍历里面的复杂数据类型
// if (typeof obj[key] === 'object') {
// // 再次调用里面的copy 进行赋值里面的常量 返回里面的数据 自动创建的新的对象 重新的到了新的地址
// newObj[key] = copy(obj[key]);
// }
newObj[key] = obj[key] //key是一个变量 所以用这种方式 循环遍历里面的每一项
}
return newObj;
};
var person1 = copy(person); //这里相当预创建了新的对象但是 person1 与person的地址就不再相同了 ,但是他们的car属性的地址相同 所以他们之间的相互关联只有car这个复杂数据类型
console.log(person1 === person);//结果为false
// 修改方式一
person1.car = {
color: 'yellow',
}
// 这样的结果相当于给 person1 的 car属性重新创建了一个新地址 并不会影响person中的car属性
// 修改方式2
person1.car.color = 'yellow';
// 这样进行修改的话 person1 与person还是共用的一个地址 ,这样修改 会同时修改
// person1.car.color = 'yellow'
递归中浅拷贝不影响原对象复杂数据类型的情况
最新推荐文章于 2020-10-27 09:37:46 发布