浅拷贝和深拷贝

浅拷贝和深拷贝

1、浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用。
2、深拷贝拷贝多层,每一级别的数据都会拷贝。

浅拷贝:

浅拷贝拷贝复杂数据只会拷贝地址,而不是直接拷贝一份数据开辟一个新的空间:
如果我们对拷贝后的数据进行修改,我们拷贝前的数据也会进行改变!

  var obj={
            id:1,
            name:'one',
            msg:{
                age:18
            }
        }
        var o = {};
        Object.assign(o , obj);
        o.msg.age = 23;
        console.log(obj);

我们会发现打印出来的obj的msg里面的age也变成了23
在这里插入图片描述

深拷贝

深拷贝拷贝复杂数据会新开辟一个空间,和原来的数据互不影响!
我们可以用函数递归的形式来进行深拷贝!

var obj={
            id:1,
            name:'one',
            msg:{
                age:18
            },
            clock:['pick','red','yeelow']
        }
        var o = {};
        function deepCopy(newobj,olobj){
            for (var k in olobj){
                var item = olobj[k];
                // 判断是否为数组
                if(item instanceof Array){
                    newobj[k] = [],
                    deepCopy(newobj[k],item) 
                    // 判断是否为对象
                }else if(item instanceof Object){
                    newobj[k] = {},
                    deepCopy(newobj[k],item) 
                    // 判断是否为简单类型
                }else{
                    newobj[k] = item;
                }
            }
        }
        deepCopy(o,obj)
        console.log(o);
        o.msg.age = 22;
        console.log(obj);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值