深刻理解jQuery 浅拷贝深拷贝

对象拷贝

    • 浅拷贝
      • 1.属性没有重复
      • 2.属性有重复,直接覆盖
      • 3.浅拷贝后修改目标对象会影响被拷贝的对象。
    • 深拷贝
      • 示例一
      • 示例二

深刻理解jQuery 浅拷贝深拷贝_第1张图片

浅拷贝

1.属性没有重复

var targetObj = {};
var obj = {
    id: 1,
    name: "andy"
};
$.extend(targetObj, obj);
console.log(targetObj);

深刻理解jQuery 浅拷贝深拷贝_第2张图片

2.属性有重复,直接覆盖

var targetObj = {
     id: 0
 };
 var obj = {
     id: 1,
     name: "andy"
 };
 $.extend(targetObj, obj);
 console.log(targetObj); // 会覆盖targetObj 里面原来的数据

深刻理解jQuery 浅拷贝深拷贝_第3张图片

 var targetObj = {
     id: 0,
     msg: {
         sex: '男'
     }
 };
 var obj = {
     id: 1,
     name: "andy",
     msg: {
         age: 18
     }
 };
 $.extend(targetObj, obj);
 console.log(targetObj); // 会覆盖targetObj 里面原来的数据

深刻理解jQuery 浅拷贝深拷贝_第4张图片

3.浅拷贝后修改目标对象会影响被拷贝的对象。

var targetObj = {
    id: 0,
    msg: {
        sex: '男'
    }
};
var obj = {
    id: 1,
    name: "andy",
    msg: {
        age: 18
    }
};
$.extend(targetObj, obj);
// 1. 浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象
targetObj.msg.age = 20;
console.log(targetObj);
console.log(obj);

深刻理解jQuery 浅拷贝深拷贝_第5张图片
因为浅拷贝是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象。

深刻理解jQuery 浅拷贝深拷贝_第6张图片

深拷贝

完全克隆(拷贝的对象,而不是地址),修改目标对象不会影响被拷贝对象。
深刻理解jQuery 浅拷贝深拷贝_第7张图片

示例一

var targetObj = {
    id: 0,
    msg: {
        sex: '男'
    }
};
var obj = {
    id: 1,
    name: "andy",
    msg: {
        age: 18
    }
};
$.extend(true, targetObj, obj);
console.log(targetObj); 

深刻理解jQuery 浅拷贝深拷贝_第8张图片

示例二

var targetObj = {
    id: 0,
    msg: {
        sex: '男'
    }
};
var obj = {
    id: 1,
    name: "andy",
    msg: {
        age: 18
    }
};
$.extend(true, targetObj, obj);
targetObj.msg.age = 20;
console.log(targetObj); // msg :{sex: "男", age: 20}
console.log(obj);

深刻理解jQuery 浅拷贝深拷贝_第9张图片

你可能感兴趣的:(前端,jquery,前端,javascript)