深浅拷贝

60 阅读1分钟

浅拷贝,深拷贝只针对引用数据类型

直接赋值是直接拷贝对象栈里面的地址,只要是对象,就会相互影响

浅拷贝,简单数据类型直接拷贝值,引用数据类型拷贝地址(单层对象没问题,多层对象有问题)

  1. 拷贝对象: Object.assign() 展开运算符 {...obj} 拷贝对象
  2. 拷贝数组: Array.prototype.concat() 或者[...arr]

递归函数:一个函数在内部可以调用自身 ,必须有出口

递归实现深拷贝

  function deepCopy(newObj,oldObj){ 
           for(let k in oldObj){
               let val = oldObj[k]; 
               if(val instanceof Array){ 
                   // let newObj[k] = [];  没有let
                    newObj[k] = [];
                    deepCopy(newObj[k],val)
                }else if(val instanceof Object ){
                    newObj[k] = {};
                    deepCopy(newObj[k],val)
                }else{
                    newObj[k] = val
                }
            }
        }

lodash实现深拷贝

<script src="./lodash.js"></script>
<script>
 const o= _.cloneDeep(obj)</script>

利用JSON实现深拷贝

把对象转换为JSON字符串  JSON.parse(JSON.stringify(obj))