当前位置 博文首页 > 文章内容

    js深浅拷贝

    作者: 栏目:未分类 时间:2020-07-10 11:03:25

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    写在前面:关于深浅拷贝,首先要理解一点,深浅拷贝都是针对引用数据类型而言的(Array、Object)。

    浅拷贝

    浅拷贝的意思是只复制对象的引用地址,并未复制真正的值。

      //声明一个对象,一个数组
      let obj = {a:"aa",b:"bb"}
      let array = [1,2]
      //分别定义一个新对象、新数组,将上面定义的对象和数组拷贝给新定义的对象和数组
      let cloneObj = obj;
      let cloneArray = array;
    
      //给拷贝后的对象增加一个属性c,给拷贝后的数组增加一个元素3
      cloneObj.c = "cc";
      cloneArray.push(3)
    
      console.log(obj)  //{a:"aa",b:"bb",c:"cc"}
      console.log(cloneObj) //{a:"aa",b:"bb",c:"cc"}
      console.log(array)  //[1,2,3]
      console.log(cloneArray) //[1,2,3]
    

    从上面的代码可以看得出来,修改拷贝后的对象或者数组,会同时改变原数组和原对象的值。

    深拷贝

    深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,连堆中的地址也是重新拷贝一份,不管修改谁,对另外一个也不会造成影响。

    目前用的比较多的方法有两个

    1.JSON.parse(JSON.stringify(obj));

     

      //声明一个对象,一个数组
      let obj = {a:"aa",b:"bb"}
      let array = [1,2]
      //分别定义一个新对象、新数组,将上面定义的对象和数组拷贝给新定义的对象和数组
      let cloneObj = JSON.parse(JSON.stringify(obj)) ;
      let cloneArray = JSON.parse(JSON.stringify(array));
    
      //给拷贝后的对象增加一个属性c,给拷贝后的数组增加一个元素3
      cloneObj.c = "cc";
      cloneArray.push(3)
    
      console.log(obj)  //{a:"aa",b:"bb"}
      console.log(cloneObj) //{a:"aa",b:"bb",c:"cc"}
      console.log(array)  //[1,2]
      console.log(cloneArray) //[1,2,3]

    2.loadash的cloneDeep方法。loadash是一个工具库,感兴趣的同学可以去看一下loadash的Api,这里就不做赘述了。