当属性值是复杂数据类型的时候,就要使用深拷贝,而递归是将复杂数据类型变为简单数据类型后,再去复制。
<script>
// 递归实现深拷贝
const obj = { name: '张三', age: 18, address: { dizhi: '上海' } }
function fn(old) {
const newObj = {}
for (let k in old) {
// 当我们在这里赋值的时候, 如果是复杂数据类型,就不能直接赋值
if (typeof old[k] === 'object') {
// 复杂数据类型
newObj[k] = fn(old[k])
} else {
// 简单数据类型
newObj[k] = old[k]
}
}
return newObj
}
const obj2 = fn(obj)
console.log(obj2);
//检验有没有成功,修改新对象address里面dizhi的值,看旧对象里有没有变
</script>