JavaScript - 数组与对象的深拷贝

前端之家收集整理的这篇文章主要介绍了JavaScript - 数组与对象的深拷贝前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

JS数组的深拷贝

思路1 : 通过重复的浅拷贝,实现深拷贝
思路2 : 通过slice和concat方法
var a = [1,"a",3];
var b = a.slice(0);
var b = a.concat([]);

JS对象的深拷贝

方法一:使用 JSON.parse() 方法
    function deepClone(initalObj) {
        var obj = {};
        try {
            obj = JSON.parse(JSON.stringify(initalObj));
        }
        return obj;
    }
    弊端: 会抛弃对象的constructor。也就是深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。RegExp对象是无法通过这种方式深拷贝。
    
    方法二:递归拷贝

function deepClone(initalObj,finalObj) {
var obj = finalObj || {};
for (var i in initalObj) {
var prop = initalObj[i];

    // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况
    if(prop === obj) {
        continue;
    }

    if (typeof prop === 'object') {
        obj[i] = (prop.constructor === Array) ? [] : {};
        arguments.callee(prop,obj[i]);
    } else {
        obj[i] = prop;
    }
}
return obj;

}

方法三:使用Object.create()方法
    直接使用var newObj = Object.create(oldObj),可以达到深拷贝的效果

猜你在找的JavaScript相关文章