-
JSON.parse()与JSON.stringify()这是最简便的深拷贝方法,但是有限制,比如如果包含时间对象,regexp对象,error对象,函数或undefined,数据会丢失或变成空对象;如果存在循环引用会报错;性能问题,对应大型复杂对象会消耗较多内存。 -
Object.assign()是 浅拷贝。对于第一层属性是深拷贝,对于嵌套在引用类型的属性则是浅拷贝。 -
递归实现手写深拷贝function dc(obj) { if (typeof obj !== 'object') { return obj; } let newObj = obj instanceof Array ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] !== 'object') { newObj[key] = obj[key]; } else { newObj[key] = dc(obj[key]); } } } return newObj } const arr = [1,2,3,{a: 1, b: {c: 2}}] console.error(dc(arr)) -
使用第三方库如Lodash提供了_.cloneDeep()方法,能处理复杂的深拷贝需求。