const _completeDeepClone = (target, map = new Map()) => { // map 用来记录是否已经被拷贝过
// 补全代码
if(typeof target == "object" && target !== null){
if(/^(Function|RegExp|Date|Set|Map)$/i.test(target.constructor.name)) return new target.constructor(target); //进行深拷贝,不能传递地址
if(map.get(target)) return map.get(target); // 已经遍历到了,直接返回结果
map.set(target,true); // 还未遍历过,设置为 true
let collect = Array.isArray(target) ? [] : {};
for( prop in target){ // 开始遍历
if(target.hasOwnProperty(prop))
collect[prop] = _completeDeepClone(target[prop],map);
}
return collect;
}else{
return target
}
}