浅拷贝与深拷贝

  • 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存。
  • 深拷贝(deep copy):复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变。

浅拷贝

浅拷贝一般用在基本数据类型,当变量b复制变量a之后,对b做出修改,会影响a的值

使用JS进行举例:

    let obj1={
        name:"张三",
        age:18
    }
    
    let obj2=obj1;
    obj2.name="李四"
    console.log("obj1=",obj1);
    console.log("obj2=",obj2);

我们先定义对象obj1,然后,将obj1拷贝给obj2,此时对obj2进行修改,打印到控制台,会发现obj1的属性也会发生变化。

深拷贝

深拷贝:我们有两个变量a,b,将a变量的值拷贝给b之后,对b进行修改,对a不会产生影响

对于深拷贝有很多种方法,我们一一举例:

深拷贝数组

slice()

    let arr1=[1,2,3]
    let arr2=arr1.slice();
    console.log("arr1=",arr1);
    arr2[0]=100;
    console.log("arr2=",arr2);

concat()

    let arr1=[1,2,3]
    let arr2=arr1.concat();  
    console.log("arr1=",arr1);
    arr2[0]=100;
    console.log("arr2=",arr2);

Array.from()

    let arr1=[1,2,3]
    let arr2=Array.from(arr1)  
    console.log("arr1=",arr1);
    arr2[0]=100;
    console.log("arr2=",arr2);

...拓展运算符

    let arr1=[1,2,3]
    let arr2=[...arr1] 
    console.log("arr1=",arr1);
    arr2[0]=100;
    console.log("arr2=",arr2);

深拷贝对象

Object.assign()

    let obj1={
        name:"张三",
        age:18
    }
    let obj2=Object.assign({},obj1);
    obj2.age=20;
    console.log("obj1=",obj1);
    console.log("obj2=",obj2);

...拓展运算符

     let obj1={
        name:"张三",
        age:18
    }
    let obj2={...obj1}

    obj2.age=20;
    console.log("obj1=",obj1);
    console.log("obj2=",obj2);
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值