2026-07-04 23:20:36
最少可用 5 行代码 实现基础深拷贝功能(仅处理对象和数组,不考虑特殊对象和循环引用):
function deepClone(obj) { return typeof obj === 'object' && obj !== null ? Array.isArray(obj) ? [...obj].map(e => deepClone(e)) : Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepClone(v)])) : obj;}代码说明:类型判断
typeof obj === 'object' && obj !== null 确保处理的是对象或数组(排除 null 的干扰)。
数组处理
Array.isArray(obj) 判断是否为数组。
[...obj].map(e => deepClone(e)) 通过展开运算符创建新数组,并递归深拷贝每个元素。
对象处理
Object.entries(obj) 将对象转换为键值对数组。
.map(([k, v]) => [k, deepClone(v)]) 递归深拷贝每个值。
Object.fromEntries() 将键值对数组重新组合为新对象。
基础类型返回
非对象类型(如数字、字符串等)直接返回原值。
循环引用处理
使用 WeakMap 存储已拷贝对象,避免无限递归。
特殊对象支持
通过 instanceof 判断并手动创建新实例(如 Date、RegExp)。
性能优化
递归时传递 hash 参数,减少重复创建存储结构。