利用递归实现深拷贝
浅拷贝和深拷贝的区别:
浅拷贝 : 只是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据
深拷贝: 将数据中所有的数据拷贝下来,对拷贝之后的数据进行修改不会影响到原数据
代码如下所示:
<script>
const obj1 = {
uname: 'zs',
age: 18,
gender: '男',
gfs: ['豆得儿'],
cars: {
brand: '宝马X5'
}
}
function deepCopy(oldObj) {
// 1. 判断一下 传递进来的 形参是不是 数组 如果是数组 给一个 空数组 如果不是 给 空对象
const newObj = Array.isArray(oldObj) ? [] : {}
// 2. 遍历 oldObj 使用 for in 遍历
for (let k in oldObj) {
// console.log(k, oldObj[k])
// 判断 对象的属性值 是 简单类型还是引用类型 (对象|数组)
if (typeof oldObj[k] === 'object') {
// console.log('引用类型', oldObj[k])
newObj[k] = deepCopy(oldObj[k])
} else {
// 简单类型 将值赋值给 newObj
newObj[k] = oldObj[k]
}
}
return newObj
}
const obj2 = deepCopy(obj1)
console.log(obj2)
</script>