js 实现深拷贝
js 实现深拷贝
- 方法 1:手动实现
 
function deepClone(obj, seen = new WeakMap()) {// 处理 null 和非对象if (obj === null || typeof obj !== 'object') return obj;// 避免循环引用if (seen.has(obj)) return seen.get(obj);let clone;if (obj instanceof Date) {clone = new Date(obj);} else if (obj instanceof RegExp) {clone = new RegExp(obj);} else if (Array.isArray(obj)) {clone = [];} else {clone = {};}// 标记已访问seen.set(obj, clone);// 递归拷贝所有可枚举属性for (let key in obj) {if (obj.hasOwnProperty(key)) {clone[key] = deepClone(obj[key], seen);}}return clone;
}
 
- 方法 2:使用 Lodash 库(推荐生产环境)
 
npm install lodash
 
import { cloneDeep } from 'lodash';const obj = { a: 1, b: { c: 2 } };
const clone = cloneDeep(obj);
 
✅ 优点:
- 完整支持各种 JS 类型(包括 
Map,Set,Date,RegExp, 函数等) - 自动处理循环引用
 - 经过充分测试,稳定可靠
 
