js运用递归实现浅拷和深拷贝

Posted gaoshengjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js运用递归实现浅拷和深拷贝相关的知识,希望对你有一定的参考价值。

浅拷贝:不能拷贝对象中的复杂属性 如 数组 和 内部的引用对象

        //运用递归实现js的浅拷贝和深拷贝
        var obj1 = {
            name : \'zs\',
            age : 18,
            dog:{
                name:\'大黄\',
                age:3
            }
        };

        var obj2 = {};

        //完成对象的拷贝   浅拷贝主要能拷贝一些基本的属性不能拷贝对象属性 当改变原对象改变所属对象的属性时拷贝的对象也会跟着改变
        for(var key in obj1){
            obj2[key] = obj1[key];
        }

        obj1.dog.name = "xxxxxxx"; //虽然上面 obj2 拷贝了  obj1 但是当obj1的所属对象发生改变时 obj2也会更正发生变化 这个就叫浅拷贝
        
        console.dir(obj2);

 

 

深拷贝:两个对象完全独立存在

       //对象1
    var obj1 = { name : \'zs\', age : 18, dog:{ name:\'大黄\', age:3 }, cars:["qq","jeep"] };
     //对象2
var obj2 = {}; function deepCopy(source, target) { for(var key in source){ var item = source[key]; if(item instanceof Object){ target[key] = {}; //定义一个空的对象来接收拷贝的内容 deepCopy(item,target[key]); //递归调用 }else if(item instanceof Array){ target[key]=[]; deepCopy(item,target[key]); }else { target[key] = source[key]; } } } deepCopy(obj1,obj2); obj1.dog.name = "xxxxxxx"; console.dir(obj1); console.dir(obj2);

 

以上是关于js运用递归实现浅拷和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

用原生JS实现深拷贝

用原生JS实现深拷贝

JS-[浅拷贝和深拷贝]

js中对象的浅拷贝和深拷贝的区别

阿里公约推荐慎用 Object 的 clone 方法来拷贝对象。

JS 原生方法原理探究如何实现浅拷贝和深拷贝?