深圳网站建设

网站建设资讯

为您提供网站建设行业资讯、网站优化知识、主机域名邮箱、网站开发常见问题等。

js深拷贝和浅拷贝有什么区别?

2021-06-08 422 编辑:光雨网络 来源:互联网

  浅拷贝:有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。


  深拷贝:把一个对象的属性和方法一个个找出来,在另一个对象中开辟对应的空间,一个个存储到另一个对象中。


  两者就在于,浅拷贝只是简单的复制,对对象里面的对象属性和数组属性只是复制了地址,并没有创建新的相同对象或者数组。而深拷贝是完完全全的复制一份,空间大小占用一样但是位置不同!


浅拷贝示例:

//浅拷贝:拷贝就是复制,就相当于把一个对象中的所有的内容,复制一份给另一个对象,
        //直接复制,或者说,就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或者方法,都可以使用
 
        // 第一种:
        var obj1 = {
            age: 10,
            sex: "男",
            car: ["奔驰", "宝马", "特斯拉", "奥拓"]
        };
        //另一个对象
        var obj2 = {};
 
        //写一个函数,作用:把一个对象的属性复制到另一个对象中,浅拷贝
        //把a对象中的所有的属性复制到对象b中
        function shallowCopy(obj,targetObj){
            for (let key in obj){
                targetObj[key] = obj[key];
            }
        }
        shallowCopy(obj1, obj2);
        console.dir(obj2);//开始的时候这个对象是空对象
        console.dir(obj1);//有属性
        //change car attribute
        obj1.car.push("奥迪");
        //the car of obj2 change,too.for the point of the car in obj2 is same as the obj1
        console.log(obj2.car);
 
        // 第二种
        var obj3 = obj1;
        console.dir(obj3);

深拷贝示例:

//深拷贝:拷贝还是复制,深:把一个对象中所有的属性或者方法,一个一个的找到.并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中
 
        var obj1 = {
            age: 10,
            sex: "男",
            car: ["奔驰", "宝马", "特斯拉", "奥拓"],
            dog: {
                name: "大黄",
                age: 5,
                color: "黑白色"
            }
        };
 
        var obj2 = {};//空对象
        //通过函数实现,把对象a中的所有的数据深拷贝到对象b中
        // use recursion
        function deepCopy(obj,targetObj){
            for (let key in obj){
                let item = obj[key];
                if (item instanceof Array){//if array
                    targetObj[key] = [];
                    deepCopy(item,targetObj[key]);
                }else if (item instanceof Object){//if object
                    targetObj[key] = {};
                    deepCopy(item,targetObj[key]);
                }else {//normal attribute
                    targetObj[key] = obj[key];
                }
            }
        }
        deepCopy(obj1,obj2);
        console.dir(obj1);
        console.dir(obj2);

以上就是js深拷贝和浅拷贝的区别是什么的详细内容,更多请关注光雨网络其它相关文章!

本站文章均为光雨网络深圳网站建设摘自权威资料,书籍,杂志或原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享到社交网站,引用和转载,我们谢绝直接复制和抄袭!感谢您...