前言
今天上网查了下js对于对象类型数据深拷贝的方法,写下此文以便复习
浅拷贝
浅说一下为什么要有深拷贝嘛,在我的认知下是js的引用数据类型,当对其进行克隆时,只是重新定义了一个指针,引用类型数据存储在堆中,这两个指针指向的是堆中的同一个地址,所以对其中一个对象的值进行修改,那么另一个值也会修改,这时候就给可以将对象中的键遍历出来放到新的对象中解决
深拷贝
那如果对象中还包含另一个对象,浅拷贝就不足以满足我们的需求,所以就可以使用深拷贝,通过查阅资料,我找到了下面的这种方式
let deepCopy = (obj) => {
if (typeof obj !== 'object') return
let newObj = Array.isArray(obj) ? [] : {}
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] =
typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]
}
}
return newObj
}
感觉这个方法封装的还是比较完善,也可能有更好的方法,欢迎大家评论指点哦