function deepClone1(obj, hash = new WeakMap()){
if(hash.has(obj)){
return hash.get(obj)
}
if(!isObject(obj)){
return obj
}
let newObj
let constructor = obj.constructor
switch(constructor){
case Date:
return new Date(obj);
case RegExp:
return new RegExp(obj)
case Number:
case String:
case Boolean:
default:
newObj = new constructor(obj)
hash.set(obj, newObj)
}
Reflect.ownKeys(obj).forEach(key => {
newObj[key] = deepClone(obj[key],hash)
})
return newObj
}
function isObject(obj){
return obj !== null && typeof obj === 'object'
}
function deepClone(val,map = new WeakMap()){
if(val === null || typeof val !=='object') return val;
//循环引用
if(map.has(val)) return map.get(val);
let clone = Array.isArray(val) ? [] : {};
map.set(val,clone);
// 获取对象中所有的属性名(包含Symbol值)
let keys = Reflect.ownKeys(val);
console.log(keys)
let len = keys.length;
while(len--){
console.log(keys[len])
clone[keys[len]] = deepClone(val[keys[len]],map);
}
return clone;
}
// deepClone1([2,4,{a:1}])
function checkNumber(val){
return typeof val === 'string' && !isNaN(Number(val))
}
function getNumber(val){
if(typeof val === 'number'){
return val
}
if(!isNaN(Number(val))){
return Number(val)
}
return 0
}
function add(num1, num2){
if(checkNumber(num1) && checkNumber(num2)){
let arr1 = num1.split('').reverse()
let arr2 = num2.split('').reverse()
let temp = 0;
let len = Math.max(arr1.length, arr2.length)
let result = []
for(let i = 0; i<= len; i++){
temp = getNumber(arr1[i]) + getNumber(arr2[i]) + temp
result[i] = temp % 10
temp = temp > 9 ? 1 : 0
}
result.reverse()
return result[0] > 0 ? result.join('') : result.join('').slice(1)
}
}
add('111324324', '3241412342134')