浅拷贝
对地址的拷贝
深拷贝
对内存空间的拷贝
使用递归实现深拷贝
let obj = {
id: 1,
name: '小花',
msg: {
age: 8
},
color: ['pink', 'red']
}
let o = {};
// 封装函数
function deepClone(newObj, oldObj) {
for (let k in oldObj) {
// 判断我们的属性值属于哪种数据类型
// 1. 获取属性值 oldObj[k]
let value = oldObj[k];
// 2. 判断这个值是否是数组(先判断数组再判断对象,因为数组也是对象,先判断对象的话下面的数组就执行不到了)
if (value instanceof Array) {
newObj[k] = [];
deepClone(newObj[k], value);
} else if (value instanceof Object) {
// 3. 判断这个值是否是对象
newObj[k] = {};
deepClone(newObj[k], value);
} else {
// 4. 属于简单数据类型
newObj[k] = value;
}
}
}
deepClone(o, obj);
console.log('o', o)
o.msg.age = 12;
对象o的age改变,obj的age不变