对象的深浅拷贝

2019-07-09  本文已影响0人  关耳木南

浅拷贝:只做一层拷贝,问题:如果对象的某个属性是引用类型,就会出现问题。
深拷贝:遇到某一条属性是引用类型,也会拷贝过来,但是引用地址是不一样的。

<script type="text/javascript"> 
    const obj = {
        a:1,
        b:["a","b"]
    }
    function extend(o1,deep){//deep为true是深拷贝
        var obj = {};
        if(o1 instanceof Array){
            obj = []
        }
        for(var key in o1){
            var value = o1[key];
            //确定value是不是引用类型,前提是deep:true
            obj[key] = (!!deep && typeof value==="object" && value !== null) ? extend(value,deep) : value 
        }
        return obj
    }
    const obj2 = extend(obj,true);
    obj2.b.push("c");
    console.log(obj);
    console.log(obj2);
</script>
1.jpg
//另一种拷贝
    
    const obj3 = {
        a:1,
        b:["a","b"]
    }
    const obj4 = JSON.parse(JSON.stringify(obj3));

    obj4.b.push("c");
    console.log(obj3);
    console.log(obj4);
1.jpg
上一篇下一篇

猜你喜欢

热点阅读