深拷贝 使用:Object,Array 深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突.
1.JSON.parse(JSON.stringify(data)) 缺点: 不可以拷贝 undefined , function, RegExp 等等类型的
2.Object.assign(target, source); // let a = Object.assign({}, b); 缺点:多层嵌套时,修改数据会有问题
3.递归拷贝
function deepClone(obj) {
if(obj === null) return null;
if(obj instanceof RegExp) return new RegExp(obj);
if(obj instanceof Date) return new Date(obj);
if(typeof obj !== 'object') {
return obj;
}
let t = new obj.constructor();
for(let key in obj) {
t[key] = deepClone(obj[key]);
}
return t;
}