深浅拷贝

 // 深浅拷贝
        // 浅拷贝 : 拷贝复制的是 引用数据类型的数据地址
        //         不是完整拷贝复制 引用数据类型中存储的具体数值
        //         执行 浅拷贝之后  两个变量是有相互联系的
        //         一个操作,另一个也会受影响

        // 所谓的浅拷贝

        // 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 );
右侧打赏一下 代码改变世界一块二块也是爱
原文地址:https://www.cnblogs.com/ht955/p/14144925.html