javascript深拷贝和浅拷贝

浅拷贝:

随着cloneArray、cloneobj改变,originArray和originobj也发生了改变

深拷贝:(使用递归)

 对目标进行完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了,只要进行了深拷贝,它们老死不相往来,谁也不会影响谁。  

function deepClone(){//对每一层的数据都实现一次 创建对象->对象赋值 的操作                  

const targetObj = source.constructor === Array ? [] : {};//判断复制的目标是数组还是对象 

for(let keys in source){//遍历目标                                                       

if(source.hasOwnPorperty(keys)){                                                   

   if(targetObj[keys] && typeof(source[keys] === 'object') || typeof(source[keys] === 'Array')){//如果值是对象,就递归一下                                                  

扫描二维码关注公众号,回复: 2238396 查看本文章

       targetObj[keys] = source.constructor === Array ? [] : {};                  

       targetObj[keys] = deepClone(source[keys]);                                 

    }else{                                                                        

       targetObj[keys] = source[keys];                                            

    }                                                                             

 }                                                                                

                                                                                 

}                                                                                     

return targetObj;                                                                     

}                                                                                           

 

 const originArray1 = [1,2,3,4,5];

 const originobj1 = {a:'a',b:'b',c:[1,2,3],d:{dd:'dd'}}

 

 const cloneArray1 = originArray;

const cloneobj1 = originobj;

 

 cloneArray1.push([[7,[8]],[9]]);

cloneobj1.a = {aaa:'aaa'};

 cloneobj1.b = [1,{bbb:'bbb'},3];

 

 console.log(cloneArray1);//[1, 2, 3, 4, 5, [[7,[8]],[9]]]

 console.log(originArray1);//[1, 2, 3, 4, 5]

 

console.log(cloneobj1);//{a:{aaa:"aaa"},b:[1,{bbb:"bbb"},3],c:[1,2,3],d:{dd:"dd"}}

console.log(originobj1);//{a:"a",b:"b",c:[1,2,3],d:{dd:'dd'}}

猜你喜欢

转载自blog.csdn.net/qq_42566295/article/details/81081486