美文网首页
数组与对象的深浅复制方法

数组与对象的深浅复制方法

作者: 安逸的蓝鲸 | 来源:发表于2018-04-20 13:54 被阅读0次

一 基本数据类型:互不影响

            var a=3;
            var b=a;
            a=4;
            console.log(a,b)  //4,3

二 引用类型值:
1.浅复制:复制的是地址指针,不会开辟新的地址空间,改变一个,另一个也会受影响
(1)数组浅复制,通过直接赋值:

             var a=[1,2,3];
             var b=a;
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3,4]

(2)对象浅复制,通过直接赋值:

            var a={name:'bob',age:'23'};  
             var b=a;
             console.log(a,b);  //{name: "bob", age: "23"}   {name: "bob",age: "23"}
             a.age=22;
             console.log(a,b);   //{name: "bob", age: 22}   {name: "bob", age: 22}

2.深复制:复制的是地址指针,开辟新的地址空间,互不影响
(1) 数组深复制:
方法1,slice方法:

             var a=[1,2,3];
             var b=a.slice(0);
             console.log(a,b); //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3]

方法2,concat方法:

             var a=[1,2,3];
             var b=a.concat();
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  //[1,2,3,4]  [1,2,3]

方法3,遍历方法:

             var a=[1,2,3];
             var b=[];
             for(var i=0;i<a.length;i++)
               {
                           b[i]=a[i];
                }
             console.log(a,b);  //[1,2,3]  [1,2,3]
             a.push(4);
             console.log(a,b);  // [1,2,3,4]  [1,2,3]

(2)对象深复制:
方法1,遍历:

             var a={name:'bob',age:'23'};
             var b={};
             for (var i in a){
             b[i]=a[i];
              }
             console.log(a,b); //{name: "bob", age: "23"}   {name: "bob", age: "23"}
             a.age=22;
             console.log(a,b); //{name: "bob", age: "22"}   {name: "bob", age: "23"}

方法2,JSON的解析和字符串化方法:

             var a={name:'bob',age:'23'};
             var b=JSON.parse(JSON.stringify(a));
             console.log(a,b); //{name: "bob", age: "23"}   {name: "bob", age: "23"}
             a.age=22;
             console.log(a,b); //{name: "bob", age: "22"}   {name: "bob", age: "23"}

相关文章

  • 数组与对象的深浅复制方法

    一 基本数据类型:互不影响 二 引用类型值:1.浅复制:复制的是地址指针,不会开辟新的地址空间,改变一个,另一个...

  • 对象引用

    concat方法拷贝原数组 对象引用(非对象直接量):concat方法会复制对象引用放到组合的新数组里,原数组和新...

  • 深复制与浅复制

    概念: 浅复制与深复制都是只针对对象,数组,这些复杂类型。 浅复制指的是复制一个对象的一层属性,如果对象,数组内嵌...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • 数组的深浅复制

    由于数组不是js的基本类型,我们在对数组进行备份,如果只是简单的将它赋值给其他变量,那么我们只要改变其中任何一个,...

  • JS中的深浅复制

    什么是深浅复制? 深复制:把要复制的对象的所引用的全部对象都复制一遍。开辟新空间。 浅复制:仅仅复制对象的引用,而...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • 深浅复制

    深浅复制和属性为copy,strong值的变化问题 浅复制:只复制指向对象的指针,而不复制引用对象本身。对于浅复制...

  • 2020-06-12

    1.==与is: 2.list修改元组的实例: 3.任意对象的深浅复制:

  • Javascript 对象数组取差集和交集的方法

    前言 对象数组常会进行取交集或者差集的操作。假设有对象数组A和对象数组B,常规方法是比较B对象数组与A对象数组的差...

网友评论

      本文标题:数组与对象的深浅复制方法

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