zoukankan      html  css  js  c++  java
  • 深浅拷贝

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

            // 所谓的浅拷贝

            // 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 );
    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    Hibernate学习(2)- hibernate.cfg.xml详解
    Hibernate学习(1)- 初识
    linux(centos6) 常用操作
    linux(centos6) 下安装 postgresql-9.3.1.tar.gz
    struts2 值栈分析
    struts2 paramsPrepareParamsStack拦截器简化代码(源码分析)
    idea 配置maven
    idea 使用github
    idea 配置svn
    idea 配置tomcat
  • 原文地址:https://www.cnblogs.com/ht955/p/14144925.html
Copyright © 2011-2022 走看看