深拷贝和浅拷贝的区别
1、浅拷贝:复制对象的引用,仅拷贝复制对象或数组的第一层结构,对于嵌套的对象或数组,仅复制引用而不是实际的对象或数组,适用于非引用类型的
2、递归复制对象或数组以及函数,及其所有浅套的对象或数组,生成一份完整的副本
常用的拷贝技巧
浅拷贝
1、Object.asign({},{}) 2、[].slice() 3、const newObj = {...obj}
深拷贝
1、JSON.parse(JSON.stringify()) 2、loash.cloneDeep() 3、手写递归遍历
function cloneDeep(obj){
let newObj = undefined
if(typeof obj !== 'object'){
newObj = obj
} else {
if(Array.isArray(obj)){
newObj = []
const array = obj
for (let index = 0; index < array.length; index++) {
const element = array[index];
if(typeof element === 'object'){
newObj.push(cloneDeep(element))
}else {
newObj.push(element)
}
}
}else {
newObj = {}
Object.keys(obj).forEach(key => {
if(typeof obj[key] === 'object'){
newObj[key] = cloneDeep(obj[key])
} else {
console.log(obj, obj[key])
newObj[key] = obj[key]
}
});
}
}
return newObj
}