写了个深拷贝, 但不知道在哪里找好使的测试用例哎
function cloneDeep(target, map = new WeakMap()) {
const type = Object.prototype.toString.call(target).slice(8,-1)
let cloned;
switch(type){
case 'Undefined':
case 'Null':
case 'String':
case 'Number':
case 'Boolean':
case 'Function':
cloned = target
break;
case 'Object':
if(map.get(target)){
cloned = map.get(target)
}else{
cloned = {}
const keys = Object.keys(target)
let i = keys.length
while(i--){
cloned[keys[i]] = cloneDeep(target[keys[i]],map)
}
map.set(target,cloned)
}
break;
case 'Array':
cloned = target.map(item => cloneDeep(item),map)
break;
case 'Date':
case 'RegExp':
cloned = new target.constructor(target)
break;
}
return cloned
}
var r = cloneDeep({ a: "a", b: [1, 2, 3] });
console.log(r);