原理
对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用(指向相同的底层值)的副本。
深拷贝方法
- JSON.stringify()和JSON.parse()
- 手写实现,在线体验
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj
}
if (obj instanceof Date) {
return new Date(obj)
}
if (obj instanceof RegExp) {
return new RegExp(obj)
}
if (obj instanceof Array) {
const res = []
obj.forEach((el, index) => {
res[index] = deepClone(el)
})
return res
}
if (obj instanceof Object) {
const res = {}
for (let el in obj) {
res[el] = deepClone(obj[el])
}
return res
}
}
使用示例
const obj = {
name: 'byd',
date: new Date('2023-12-28'),
arr: [1, [2, 3], 4, [5, [6, 7]]],
innerObj: {
a: 22,
b: 33
}
}
const cloneObj = deepClone(obj)
console.log(obj, cloneObj)
cloneObj.name = 'wl'
cloneObj.date = new Date('2023-12-29')
cloneObj.arr[1][0] = 3
cloneObj.innerObj.a = 44
console.log(obj, cloneObj)