1.JSON.parse(JSON.stringify(obj))
let obj = {a: 1, b: {c: 2}}; let newObj = JSON.parse(JSON.stringify(obj)); 这种方法的优点是简单易用,代码量少。但是它有一些限制: 不能复制函数、正则表达式等特殊对象; 不能处理循环引用的情况; 不能处理Date对象;
2.递归实现
function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj; } let newObj = Array.isArray(obj) ? [] : {}; for (let key in obj) { newObj[key] = deepClone(obj[key]); } return newObj; }
这种方法的优点是可以处理复杂对象,但是它也有一些限制:
- 不能处理循环引用的情况;
- 对于一些特殊对象,例如Date对象,需要特殊处理。