美文网首页
JS对象深拷贝

JS对象深拷贝

作者: 里昂的凍檸茶 | 来源:发表于2019-05-17 23:53 被阅读0次

    方法一

    var obj = {
        name:"Leon",
        age:17,
        hobby:function(){
            let hb = "swimming";
            return hb;
        }
    }
    var newObj = {};
    for(val in obj){
        newObj[val] = obj[val];
    }
    console.log(newObj);
    

    注意:
    该方法只适用于简单类型的对象,不适用于对象里面嵌套对象;
    即使拷贝成功,给新对象里的对象的变量重新赋值会改变原对象!

    所以,对于复杂的对象(对象里面嵌套对象),我们要采用方法二;

    方法二:递归

    var obj = {
        name:"Leon",
        age:17,
        hobby:function(){
            let hb = "swimming";
            return hb;
        },
        data:{
            day:"Tus",
            time:"morning"
        },
        arr:[
            {name:"tt"},
            {name:"yy"}
        ]
    }
    function deepCopy(obj){
        let copyObj = Array.isArray(obj)?[]:{};
        for(var key in obj){
            copyObj[key] = typeof(obj[key])==="object"?deepCopy(obj[key]):obj[key];
        }
        console.log(copyObj==obj);//false
        return copyObj;
    }
    console.log(deepCopy(obj))
    

    该方法使用于任何对象

    相关文章

      网友评论

          本文标题:JS对象深拷贝

          本文链接:https://www.haomeiwen.com/subject/dshnaqtx.html