美文网首页
浅谈JS浅拷贝&深拷贝

浅谈JS浅拷贝&深拷贝

作者: 小仙有毒_1991 | 来源:发表于2020-08-12 09:59 被阅读0次

    深拷贝

    方案一 :

     var deepCopy = function(obj) {
        let objClone = Array.isArray(obj)?[]:{};
        if(obj && typeof obj == 'object'){ 
          // 方案一
         //const keys = Object.keys(obj );
         //keys.map((key)=>{
         // 相关操作
         //});
         //方案二
          for( var i in obj){//所有可枚举的属性
            if(obj.hasOwnProperty(key)){//存在于实例上
               if(obj[key] && typeof obj[key] == 'object'){
                 objClone[key] = deepCopy(obj[key])
               }else{
                 objClone[key] = obj[key]; 
              }
           }
          }
        }
    }
    
    
    

    方案二:
    用JSON.stringify转为字符串 再用JSON.parse把字符串再转为新的对象
    注: RegExp对象,无法通过此方式深拷贝

    浅拷贝

    Es6的object.assign() 扩展运算符都是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身

    所以只能实现一层基本类型属性的拷贝
    当obj1中属性是引用类型时,就会发现,修改其中一个属性值,另一个值也发生变化。
    如下所示:

      let obj1 = {a: 1, b: { c: 2}}
      let obj2 = Object.assign({},obj1) // 或者 obj2 = {...obj1}
    
      obj2.b.c = 4
      console.log(obj1) //{ a: 1, b: { c: 4 } }
    

    相关文章

      网友评论

          本文标题:浅谈JS浅拷贝&深拷贝

          本文链接:https://www.haomeiwen.com/subject/rghpdktx.html