深拷贝:假设我有一个对象A,我赋值给B,无论怎么改变B,A都不会发生任何的改变,即为深拷贝
浅拷贝:假设我有一个对象A,我赋值给B,改变一下B,A就会跟着改变,A,B对象的地址指向一个地方,只是简单的赋值,即为浅拷贝。
1、递归
function deepClone (obj) {
const o = {}
for (let i in obj) {
if (typeof obj[i] === 'object') {
o[i] = deepClone(obj[i])
} else {
o[i] = obj[i]
}
}
return o
}
2、JSON.parse(JSON.stringify(obj))
例子:
const obj = {
a: 1,
b: 2,
c: {
d: 3
}
}
const deepObj = deepClone(obj)
obj.a = 11
obj.c.d = 33
console.log('obj', obj) // {a: 11, b: 2, c: { d: 33 }}
console.log('deepObj', deepObj) // {a: 1, b: 2, c: { d: 3 }}
// 通过改变原对象,深拷贝的对象不受影响。
完成!!!