使用 JSON.pare(JSON.stringify()) 实现深拷贝时,由于 JSON 中没有 symbol、函数、正则、日期等数据类型,所以存在缺陷。所以,要么引入第三方库实现深拷贝,要么通过递归的方法。
const deepCopy = function(obj){
let cloneObj
// 普通数据类型
if(['number','string','boolean','undefined','symbol'].includes(typeof obj) || obj === null){
cloneObj = obj
return cloneObj
}
// 引用类型,即对象(对象、函数、数组、日期、正则)
// 根据对象的构造函数创造一个实例对象
cloneObj = new obj.constructor || Object
// 将对象变成数组,再遍历和递归
// fortEach 中的 item 等于 [key,value]。
Object.entries(obj).forEach(([key,value]) => {
cloneObj[key] = deepCopy(value)
})
return cloneObj
}
const test = {'a':1,'b':Symbol(1),'c':true,'d':undefined,'e':null,'f':{'aa':11,'bb':{'aaa':22}},'g':new Date(),'h':new RegExp()}
deepCopy(test)