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

2021-03-21 04:25

阅读:537

标签:car   不能   inf   定义   对象属性   深拷贝   item   数组   source   

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

        //运用递归实现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运用递归实现浅拷和深拷贝

标签:car   不能   inf   定义   对象属性   深拷贝   item   数组   source   

原文地址:https://www.cnblogs.com/gaoSJ/p/12727095.html


评论


亲,登录后才可以留言!