js数组的深浅拷贝

突然遇到数组、对象拷贝。特来总结下。对于基本数据类型的拷贝,并没有深浅拷贝的区别,我们所说的深浅拷贝都是引用数引用数据类型而言的。

浅拷贝

可以通过slice或者concat方法直接实现。

var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0);
arr1[0] = 0;
console.log(arr1);
console.log(arr2);

深拷贝对象或者数组

var deepCopy = function(o) {
    if (o instanceof Array) {
        var n = [];
        for (var i = 0; i < o.length; ++i) {
            n[i] = deepCopy(o[i]);
        }
        return n;

    } else if (o instanceof Object) {
        var n = {}
        for (var i in o) {
            n[i] = deepCopy(o[i]);
        }
        return n;
    } else {
        return o;
    }
}

注意:代码中我用instanceof来判断类型,一定要把o instanceof Array 放在 o instanceof Object上面,因为如果是数组的话,instanceof Object也返回true。