浅拷贝 / 深拷贝

在对引用数据类型来讲,变量中,存储的是 引用数据类型的 内存地址

所谓的 浅拷贝 是将 引用数据类型的 内存地址,拷贝,赋值给一个新的变量存储

等于两个变量,存储的是同一个内存地址
效果是,任意一个变量,修改引用数据类型中存储的数据
另一个变量,也会受影响

所谓的 深拷贝 是将 引用数据类型的 具体数据,拷贝,赋值给一个新的变量存储

等于两个变量,存储的是不同的内存地址,只是数据相同而已
效果是,任意一个变量,修改引用数据类型中存储的数据
另一个变量,不会受到影响

总结:

浅拷贝 : 复制内存地址,效果,一个改变,另一个也受影响
神拷贝 : 复制具体数据,效果,一个改变,另一个不受影响

jQuery的深浅拷贝

语法1: 浅拷贝

$.extend(变量1 , 变量2 , 变量3.... )
将 变量2 和 变量3等等 中 存储的数据 都 拷贝 到 变量1中

语法2: 深拷贝

$.extend(true , 变量1 , 变量2 , 变量3.... )
将 变量2 和 变量3等等 中 存储的数据 都 拷贝 到 变量1中
    const obj1 = {name:'张三',age:18,arr1:[1,2,3,4,5]};
    const obj2 = {sex:'男',addr:'北京', arr2:[6,7,8,9,10]};
    const obj3 = {};
    const obj4 = {};
    
    // 浅拷贝
    $.extend( obj3 , obj1 , obj2 );
    // 深拷贝
    $.extend(true , obj4 , obj1 , obj2 );

    obj1.arr1[0] = '北京',
    obj2.arr2[0] = '上海',

    obj1.name = '李四',
    obj2.sex = '女',

    console.log( obj3 );  //arr1和arr2中数据改变
    console.log( obj4 );  //数据没有改变

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。