function deepClone (value,hash = new WeakMap){//弱引用 不要用map
if(value == null){return value;}
if(calue instanceof RegExp){return new RegExp(value)}
if(value instanceof Date){return new Date(value)}
//函数不需要拷贝
if(typeof value != 'object') return value
let obj = new value.constructor();
//说明是一个对象类型
if(hash.get(value)){
return hash,get(value)
}
hash.set(value,obj);
for(let key in value){//in会遍历当前对象的属性和_proto
if(value.hasOwnProperty(key)){
//如果值还有可能是对象就继续拷贝
obj[key] = deepClone(value[key],hash)
}
}
return obj
}