概念
由于对象的特点,所以一般进行数据的复制时没办法复制对象的嵌套类型,当完全复制且对原对象完全没有引用关系时叫做深拷贝,否则叫做浅复制。
josn数据方式进行深拷贝
let a = {
x : 1,
y : 2,
z : {
a : 4,
b : 5
}
}
// 深拷贝 JSON.stringify转变为josn格式的字符串 JSON.parse从json格式转变为对象
let copy = JSON.parse(JSON.stringify(a));
封装深拷贝方法(手写)
function copyClone(obj){
//使类型相同
let cloneobj=Array.isArray(obj)?[]:{};
//数组或者对象时
if(obj.constructor===Array||obj.constructor===Object){
//使用keys方法把obj中的索引或者key变为数组然后进行遍历
Object.keys(obj).forEach((item,index)=>{
// 写在前面递归覆盖
cloneobj[item]=obj[item];
if(obj[item].constructor===Array||obj[item].constructor===Object){
//递归拿到返回值进行覆盖
cloneobj[item]= copyClone(obj[item]);
}
})
}else{//普通类型
cloneobj=obj;
}
return cloneobj;
}
// 测试
let b=copyClone(a);
a.z.a=6
console.log(b);
console.log(a);