对象的浅复制和深复制

浅深拷贝解析

1.理解浅复制和深复制:

    原因:

        在js里面,有值类型和引用类型,当你直接把一个引用类型进行复制的时候,只是复制了一个地址

        当复制的对象和被复制对象一方,通过地址修改数据的时候,地址指向的数据变化,二者相互影响

        这就是浅拷贝...

    深拷贝:

        就是复制一般引用类型的时候,不只是复制地址,而是新开辟一个空间,二者相互独立,修改一个另一个不会发生改变

2.实现:

    0.假设我的数据为:

        

var obj={
    a:1,
    b:[1,2,3],
    c:{
        name:"jkj",
        sex:"male"
    }
}

    1.浅拷贝:

            

function shallowCopy(src) {
    var dst={};
    for(var prop in src){
        if(src.hasOwnProperty(prop)){
            dst[prop]=src[prop];
        }
    }
    return dst;
}

2.使用递归方法实现的深拷贝:(有个问题--函数也是引用类型,但是这里面没有判断??)

function  deepCopy(src,target){
    /*
    * 考虑是不是需要在之前已有的对象上,进行追加()
    * 或者,直接拷贝在一个新的对象里面
    * */
    var target=target||{};
    for(var prop in src){
            if(typeof src[prop]==='object'){
                if(Array.isArray(src[prop])){
                    target[prop]=[];
                }else{
                    target[prop]={};
                }
                deepCopy(target[prop],src[prop])
            }else{
                target[prop]=src[prop];
            }
    }

    return target;
}

3.使用json的解析来实现,简单粗暴(底层应该也是递归吧)

    

var temp=JSON.stringify(obj);
var res=JSON.parse(temp);

res.c=333;
console.log(res.c,obj.c);

    






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值