码迷,mamicode.com
首页 > Web开发 > 详细

js深拷贝和浅拷贝

时间:2017-09-23 16:18:27      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:也会   val   bsp   str   深拷贝和浅拷贝   new   function   push   通过   

  js中对象分为基本类型和复合(引用)类型。基本类型存放在栈内存,复合(引用)类型存放在堆内存。

  栈内存存放一些基本类型的变量和对象的引用变量,堆内存用于存放由new创建的对象。

      浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。

        var obj = {
            a : 1,
            b : 2
        }
        var obj1 = obj;
            obj1.b = 3;
        console.log(obj1); //{a: 1, b: 3}
    console.log(obj1===obj); //true

  深拷贝:我在想如何让obj1复制obj的对象内容,在我对obj1进行修改时,不影响obj。通过递归调用浅拷贝来解决。

        let obj = {
            a : "1",
            b : "2",
            c : function col(){},
            d : [1,2,3],
            e : {
                f : "4"
            }
        }
        function deepCopy(obj){
            if(typeof obj === "object"){
                if(obj.constructor === Array){
                    var newArr = [];
                    for(var i = 0;i<obj.length;i++) newArr.push(obj[i]);
                    return newArr;
                }else{
                    var newObj = {};
                    for(var key in obj){
                        newObj[key] = this.deepCopy(obj[key]);
                    }
                    return newObj;
                }
            }else{
                return obj;
            }
        }

简化:

        function deepCopy(obj){
            let temp = obj.constructor === Array?[]:{};
            for(let val in obj){
                temp[val] = typeof obj[val] == object ? deepCopy(obj[val]) : obj[val];
            }
            return temp;
        }
        console.log(deepCopy(obj));

 

 

js深拷贝和浅拷贝

标签:也会   val   bsp   str   深拷贝和浅拷贝   new   function   push   通过   

原文地址:http://www.cnblogs.com/zhang-wang/p/7581215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!