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。