数组的深拷贝
最简单的深拷贝(JSON.stringify() 和JSON.parse())
先把对象使用JSON.stringify()转为字符串,再赋值给另外一个变量,然后使用JSON.parse()转回来即可
var arr = ['num, 1, true, ['num1', 'num2'], {num: 1}]
var new_arr = JSON.parse( JSON.stringify(arr) );
缺点:不能拷贝函数
利用递归进行深拷贝
首先,判断一下类型,如果是对象,我们再递归调用深拷贝函数
var deepCopy = function(obj) {
//先判断传入的类型是否为object,如果是进行下一步
if (typeof obj !== 'object') return;
//如果是object,再进一步判断是数组还是对象,并进行声明
var newObj = obj instanceof Array ? [] : {};
//对这个object进行循环,并判断obj对象自身是否具有指定名称的属性(不包括原型链)
for (var k in obj) {
if (obj.hasOwnProperty(key)) {
//判断对象中的每一项是否是object类型,如果是,进行递归,如果不是,直接赋值到新对象
newObj[k] = typeof obj[k] === 'object' ? deepCopy(obj[k]) : obj[k];
}
}
//返回新对象
return newObj;
}
问题:应为使用递归的原因,性能上会不如浅拷贝