// 深浅拷贝
// 浅拷贝 : 拷贝复制的是 引用数据类型的数据地址
// 不是完整拷贝复制 引用数据类型中存储的具体数值
// 执行 浅拷贝之后 两个变量是有相互联系的
// 一个操作,另一个也会受影响
// 所谓的浅拷贝
// const obj1 = {
// name:'张三',
// age:18,
// }
// obj1 中存储的是 对象 的内存地址
// 如果直接拷贝复制这个内存地址,执行的就是浅拷贝
// obj2 中 实际上 存储的是 obj1中 存储的对象的内存地址
// 这样的操作,我们称为 浅拷贝
// obj1和obj2相互之间是有关联的
// obj1操作会影响obj2 obj2操作也会影响obj1
// const obj2 = obj1;
// obj2.name = '李四';
// console.log(obj1);//李四
// obj1.age = 100;
// console.log(obj2);、、李四
// obj1 和 obj2 存储的是相同的内存地址
// 等于 obj1 和 obj2 操作的是同一个 内存空间
// obj1的操作结果,obj2,代用这个相同的内存空间,也会看到操作结果
// 深拷贝 是复制 引用数据类型中,存储的数据数值,不是拷贝复制内存地址
// const obj3 = {
// name:'张三',
// age:18,
// arr:[1,2,3,4,5],
// }
// const obj4 = {};
// 通过循环遍历,将ojb3中的键名和键值,都拷贝赋值给obj4
// 这样的操作称为深拷贝,obj3和obj4,只是数据相同,相互之间不再有联系
// for(let key in obj3){
// obj4[key] = obj3[key];
// }
// obj3.name = '李四';
// obj4.age = 180;
// console.log(obj3);
// console.log(obj4);
// 总结:
// 所谓浅拷贝,拷贝复制,引用数据类型的内存地址
// 等于 两个变量 操作同一个内存地址
// 一个操作引起的改变,对另一个也会有影响
// 所谓深拷贝,拷贝复制,引用数据类型的数据
// 两个变量之间没有相互联系
// 实际项目中,往往会遇到 对象或者数组中,存储 引用数据类型
// 也就是是,数组或者对象中,存储的也是一个数组或者对象
// 如果只是简单的循环遍历,二维数组或者对象,实际执行的也是浅拷贝,需要通过递归函数,再次执行深拷贝
// 此时就要考虑 深浅拷贝的问题
// jQuery中提供了深拷贝方法
// $.extend() 深浅拷贝方法
// 参数1 : 是否执行深拷贝,默认值false,执行浅拷贝
// 设定为 true 执行 深拷贝
// 参数2 : 新变量
// 参数3 : 原始变量
const obj = {
id:1,
name:'张三',
sex:'男',
hobby:['吃','喝','玩','乐'],
}
const newObj = {};
$.extend( true , newObj , obj);
obj.hobby[0] = 'chi';
obj.name= 'chi';
console.log( obj );
console.log( newObj );