第二课:函数进阶(六):递归 - 浅拷贝和深拷贝(2021/4/20)

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

1.浅拷贝(深一层的msg就只是地址引用,修改obj的msg和o的msg会一起修改)

var obj = {
        id:1,
        name:'andy',
        msg:{
                age:18
        },
        color:['pink','red']
}
var o = {};
for(var k in obj){
        // k 是属性名 obj[k]是属性值
        o[k] = obj[k];
}
console.log(o);
o.msg.age = 20;
console.log(obj); //obj.msg.age也被修改为20

es6的浅拷贝语法糖:Object.assign()

Object.assign(o,obj);
console.log(o);

2.深拷贝:

function deepCopy(newobj,oldobj){
        for(var k in oldobj){
                // 判断我们的属性值属于哪种数据类型
                // 1.获取属性值 oldobj[k]
                var item = oldobj[k];
                // 2.判断这个值是否是数组
                if(item instanceof Array){
                        newobj[k] = [];
                        deepCopy(newobj[k],item);
                }
                // 3.判断这个值是否是对象
                else if(item instanceof Object){
                        newobj[k] = {};
                        deepCopy(newobj[k],item);
                }
                // 4.属于简单数据类型
                else{
                        newobj[k] = item;
                }
        }     
}

deepCopy(o,obj);
obj.msg.age = 100;
console.log(o) //o.msg.age没有修改,还是18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值