深拷贝 浅拷贝
2021-06-09 本文已影响0人
RickyWu585
https://zhuanlan.zhihu.com/p/330218772
js原生api都是浅拷贝
- 浅拷贝:只拷贝一层,如果第一层里的变量对应的value是复杂类型,那么这个value是地址,则拷贝出来的也只是个地址。拷贝一个指针,指针指向的是原对象的地址,修改会影响原对象
- 深拷贝:不管有多少层,全部拷贝。在堆空间内重新开辟一块内存存储新对象,不会影响到原对象
function deepClone(obj = {}){
if(typeof obj !== 'object' || obj === null){
return obj
}
let result
if(obj instanceof Array){
result = []
}else{
result = {}
}
for(let key in obj){
result[key] = deepClone(obj[key]) //递归拷贝深层对象
}
return result
}