什么是深拷贝?

深拷贝就是将数据完完整整的拷贝一份,修改其中任何一个都不会对另外一个产生影响

什么是浅拷贝?

浅拷贝就是虽然也是拷贝了一份数据,但是用的是同一个指针,修改其中一份数据里任何的东西都会改变另一份数据,相当于在操作同一份数据,相互影响

常用的深拷贝方式

  • JSON.parse( JSON.stringify ( 数据 ) );

    常用的浅拷贝方式

  1. { …} 解构
  2. Object.assign( )

    1. 对于Object.assign()而言,如果对象的属性值为简单类型(string,number),通过Object.assign({},srcobj);得到的新对象为深拷贝;如果属性值为对象或其他引用类型,那对于这个对象而言其实是浅拷贝的,这是Object.assign()特别需要注意的地方
      1. let srcObj = {'name': 'lilei', 'grade': {'chi':"80", 'eng':"100"}};
      2. let copyObj2 = Object.assign({}, srcObj);
      3. copyObj2.name="zhangsan";
      4. copyObj2.grade.chi="50";
      5. console.log('srcObj', srcObj); //name: "lisi" grade: {chi: "50", eng: "100"}
      6. console.log('copyObj2', copyObj2); //name: "zhangsan" grade: {chi: "50", eng: "100"}
      7. ————————————————
      8. 版权声明:本文为CSDN博主「你好像很好吃a」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      9. 原文链接:https://blog.csdn.net/weixin_44296929/article/details/103879019
  3. Object.create( ) 该方法比较特殊,虽然也是浅拷贝,但是如果修改被拷贝对象的第一层,那么拷贝的那一份也会被修改

    1. var obj1 = {
    2. a: 1,
    3. b: 2,
    4. c: {
    5. d: 3,
    6. },
    7. };
    8. var obj2 = Object.create(obj1);
    9. // obj2.a = 3;
    10. obj2.c.d = 4;
    11. obj1.a = 123;
    12. console.log(obj1);
    13. console.log(obj2.a);
  4. 以上代码,obj2拷贝了obj1,如果修改obj2的第一层那么obj1不会受到影响,但是如果修改obj1,那么obj2也会修改,算是特殊情况吧! 目前所掌握的只允许我这么理解!!!