浅谈浅拷贝和深拷贝

2 篇文章 0 订阅
1 篇文章 0 订阅
  • 理解浅拷贝和深拷贝

       js中的数据可以大致分为两种类型:基本数据类型引用数据类型。

      基本数据类型:基本数据类型的变量的赋值,可理解为深拷贝,修改其中一个数据,另一个数据不会随之变化

      引用数据类型:引用数据类型分为key和value,它们两个分开存储,数据的值value在内存中,而指针key指向内存中的value值;引用数据类型的数据进行赋值,其实只是拷贝了数据的指针key,两个key指向的是同一个内存中的同一个值,修改其中一个指针对值的修改,另一个数据的值也会随着更改。


  • 如何简单进行深拷贝

    • 数组的深拷贝

      var a1 = [1,2,3];
      var a2 = a1.concat();
      
      a1[0] = 2;
      console.log(a1);// [2,2,3]
      console.log(a2);//[1,2,3]
      
      //=================================
      //我们也可以使用ES6的写法
      var a1 = [2,2,2];
      var a2 = [...a1];
      a1[0] = 1;
      console.log(a1);// [1,2,2]
      console.log(a2);//[2,2,2]

      个人觉得ES6这种方式进行简单的数组的深拷贝,再好不过啦。
      注意:但是如果数组的item是对象,这种方法复制的数组就是浅拷贝的哦

    • 对象的深拷贝

      • 借助我们的JQuery库中的extend方法:$.extend( [deep ], target, object1 [, objectN ] )
        • deep:表示是否进行深拷贝
        • target: 合并后到该对象上
        • object1: 需要被合并的对象
        • var o1 = {a: 1, b: 2, c: 3};
          var o2 = $.extend(true,{},o1);
          o1.a = 2;
          console.log(o1); //{2,2,3}
          console.log(o2); //{1,2,3}

           

      • JSON.stringify():对简单的对象深拷贝,不能拷贝具有方法,子级的对象
        • var o1 = {a: 1, b: 2, c: 3};
          var o2 = JSON.parse(JSON.stringify(o1));
          o1.a = 2;
          console.log(o1); //{2,2,3}
          console.log(o2);//{1,2,3}

           

      • 简单介绍到这里,哈哈哈,这些真的是简单好用的方法,适合日常使用,关于多级对象和方法的拷贝,以后再整理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值