JS深拷贝进阶版支持特殊对象类型Map、Set
function deepClone(target: any, map new WeakMap()) {// 1. 基础类型直接返回if (target null || typeof target ! object) {return target;}// 2. 处理循环引用if (map.has(target)) {return map.get(target);}// 3. 处理特殊对象const type Object.prototype.toString.call(target);let cloneTarget: any;switch (type) {case [object Date]:return new Date(target);case [object RegExp]:return new RegExp(target.source, target.flags);case [object Map]:cloneTarget new Map();map.set(target, cloneTarget);target.forEach((value: any, key: any) {cloneTarget.set(key, deepClone(value, map));});return cloneTarget;case [object Set]:cloneTarget new Set();map.set(target, cloneTarget);target.forEach((value: any) {cloneTarget.add(deepClone(value, map));});return cloneTarget;default:break;}// 4. 处理数组 / 对象cloneTarget Array.isArray(target)? []: Object.create(Object.getPrototypeOf(target));map.set(target, cloneTarget);// 5. 处理 Symbol 普通 keyconst keys Reflect.ownKeys(target);keys.forEach((key) {cloneTarget[key] deepClone(target[key], map);});return cloneTarget;}