jQuery 对象深浅拷贝的问题

拷贝对象语法:
$.extend( [deep], target, object1, [objectN] )

  1. deep如果写true就为深拷贝,false或者不写都为浅拷贝
  2. target为拷贝的目的地
  3. object1 为拷贝的源头
  1. 浅拷贝(默认):对象只复制地址,不开辟新的地址空间,修改拷贝之后target的对象里的内容会把原来的object1那边也改掉。如果target里面本来就有一个同名的对象,会直接覆盖里面的原有数据
  2. 深拷贝:是开辟新的地址空间给对象,对target的对象的操作不会影响到原来object1那边。如果target里面本来就有一个同名的对象,会直接保留原有的不冲突的数据
浅拷贝深拷贝
简单数据类型变量名相同的情况覆盖覆盖
变量名不同的情况保留保留
对象对象变量名相同的情况覆盖保留对象里面key不同的内容
对象变量名不同的情况保留保留
<script>
    var targetObj = {
        id: 1,
        age: 80,
        msg: {
            xixi: 8,
            sex: 1,
            heihei: 1,
        },
    };
    var obj = {
        id: 10000,
        msg: {
            haha: 8,
            sex: 1000,
            name: "zz",
        },
    };
    // (默认)浅拷贝:简单数据类型同名的覆盖,不同名的保留,复杂数据类型复制地址,同名的原来的覆盖
    /*      
    		$.extend(targetObj, obj);
            console.log("old");
            console.log(obj);
            console.log("new");
            console.log(targetObj); 
            // 浅拷贝情况下 targetObj 的msg: {haha: 8, sex: 1000, name: 'zz'}
            // 因为msg名字相同,所以直接把地址拷贝过去了,原来的就没了
 	*/
    
    // 深拷贝
    $.extend(true, targetObj, obj);
    console.log("old");
    console.log(obj);
    console.log("new");
    console.log(targetObj);
    // 深拷贝情况下msg: {xixi: 8, sex: 1000, heihei: 1, haha: 8, name: 'zz'}
    // 只有sex因为同名被覆盖了,其他都保留了
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值