一、前言:深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的 。 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。 但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
二、深拷贝的几种方法。
for循环拷贝加递归,当只用for循环的时候只会拷贝单层。
function deepClone(obj) {
if (typeof obj !== "object" || obj === null) {
return obj
}
let newobj = obj instanceof Array ? [] : {};
// if(obj instanceof Array){
// newobj = []
// }else{
// newobj = {}
// }
for (const key in obj) {
newobj[key] = deepClone(obj[key])
}
return newobj
}
JSON对象转换。缺点underfind和symbol以及function
function deepClone(obj) {
let newobj = JSON.stringify(obj)
return JSON.parse(newobj)
}
Object.assign方法实现拷贝,但是有嵌套能拷贝单层
function deepClone(obj) {
let newobj = Object.assign({},obj)
return JSON.parse(newobj)
}