浅析深拷贝和浅拷贝的区别_浅拷贝和深拷贝什么时候用

浅析深拷贝和浅拷贝的区别_浅拷贝和深拷贝什么时候用浅拷贝:有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。 深拷贝:把一个对象的属性和方法一个个找出来,在另一个对象中开辟对应的空间,一个个存储到另一个对象中。 两者就在于,浅拷贝只是简单的复制,对对象里面的对象属

浅析深拷贝和浅拷贝的区别_浅拷贝和深拷贝什么时候用"

浅拷贝:有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。

深拷贝:把一个对象的属性和方法一个个找出来,在另一个对象中开辟对应的空间,一个个存储到另一个对象中。

两者就在于,浅拷贝只是简单的复制,对对象里面的对象属性和数组属性只是复制了地址,并没有创建新的相同对象或者数组。而深拷贝是完完全全的复制一份,空间大小占用一样但是位置不同!!

浅拷贝示例:

var obj1 = {
        age: 10,
        sex: "男",
        car: ["奔驰", "宝马", "特斯拉", "奥拓"]
      };
      //另一个对象
      var obj2 = {};

      //写一个函数,作用:把一个对象的属性复制到另一个对象中,浅拷贝
      //把a对象中的所有的属性复制到对象b中
      function shallowCopy(obj,targetObj){
        for (let key in obj){
          targetObj[key] = obj[key];
        }
      }
      shallowCopy(obj1, obj2);
      console.dir(obj2);//开始的时候这个对象是空对象
      console.dir(obj1);//有属性
      //change car attribute
      obj1.car.push("奥迪");
      //the car of obj2 change,too.for the point of the car in obj2 is same as the obj1
      console.log(obj2.car);

      // 第二种
      var obj3 = obj1;
      console.dir(obj3);

深拷贝案例:

var obj1 = {
        age: 10,
        sex: "男",
        car: ["奔驰", "宝马", "特斯拉", "奥拓"],
        dog: {
          name: "大黄",
          age: 5,
          color: "黑白色"
        }
      };

      var obj2 = {};//空对象
      //通过函数实现,把对象a中的所有的数据深拷贝到对象b中
      // use recursion
      function deepCopy(obj,targetObj){
        for (let key in obj){
          let item = obj[key];
          if (item instanceof Array){//if array
            targetObj[key] = [];
            deepCopy(item,targetObj[key]);
          }else if (item instanceof Object){//if object
            targetObj[key] = {};
            deepCopy(item,targetObj[key]);
          }else {//normal attribute
            targetObj[key] = obj[key];
          }
        }
      }
      deepCopy(obj1,obj2);
      console.dir(obj1);
      console.dir(obj2);

总结:如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。详见https://www.jianshu.com/p/1c142ec2ca45分析

本文转自https://blog.csdn.net/m0_37679293/article/details/87987211,侵删。

 

今天的文章浅析深拷贝和浅拷贝的区别_浅拷贝和深拷贝什么时候用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/44892.html

(0)
编程小号编程小号
上一篇 2023-09-07 14:06
下一篇 2023-09-07

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注