话不多说贴代码
function deepClone(target, wm = new WeakMap()) {
if (typeof target === 'object') {
if (target === null) {
return null;
}
else if (target instanceof Date) {
return new Date(target);
}
else if (target instanceof RegExp) {
return new RegExp(target);
}
// 亲,暂只考虑 普通对象 或 数组
let targetClone = Array.isArray(target) ? [] : {};
if (wm.has(target)) {
targetClone = wm.get(target);
}
else {
wm.set(target, targetClone);
for (const key in target) {
if (Object.hasOwnProperty.call(target, key)) {
targetClone[key] = deepClone(target[key], wm);
}
}
}
return targetClone;
// 普通对象 或 数组 /
}
return target
}
关于WeakMap
请移步 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap.