1. function deepClone1(obj, hash = new WeakMap()){
    2. if(hash.has(obj)){
    3. return hash.get(obj)
    4. }
    5. if(!isObject(obj)){
    6. return obj
    7. }
    8. let newObj
    9. let constructor = obj.constructor
    10. switch(constructor){
    11. case Date:
    12. return new Date(obj);
    13. case RegExp:
    14. return new RegExp(obj)
    15. case Number:
    16. case String:
    17. case Boolean:
    18. default:
    19. newObj = new constructor(obj)
    20. hash.set(obj, newObj)
    21. }
    22. Reflect.ownKeys(obj).forEach(key => {
    23. newObj[key] = deepClone(obj[key],hash)
    24. })
    25. return newObj
    26. }
    27. function isObject(obj){
    28. return obj !== null && typeof obj === 'object'
    29. }
    30. function deepClone(val,map = new WeakMap()){
    31. if(val === null || typeof val !=='object') return val;
    32. //循环引用
    33. if(map.has(val)) return map.get(val);
    34. let clone = Array.isArray(val) ? [] : {};
    35. map.set(val,clone);
    36. // 获取对象中所有的属性名(包含Symbol值)
    37. let keys = Reflect.ownKeys(val);
    38. console.log(keys)
    39. let len = keys.length;
    40. while(len--){
    41. console.log(keys[len])
    42. clone[keys[len]] = deepClone(val[keys[len]],map);
    43. }
    44. return clone;
    45. }
    46. // deepClone1([2,4,{a:1}])
    47. function checkNumber(val){
    48. return typeof val === 'string' && !isNaN(Number(val))
    49. }
    50. function getNumber(val){
    51. if(typeof val === 'number'){
    52. return val
    53. }
    54. if(!isNaN(Number(val))){
    55. return Number(val)
    56. }
    57. return 0
    58. }
    59. function add(num1, num2){
    60. if(checkNumber(num1) && checkNumber(num2)){
    61. let arr1 = num1.split('').reverse()
    62. let arr2 = num2.split('').reverse()
    63. let temp = 0;
    64. let len = Math.max(arr1.length, arr2.length)
    65. let result = []
    66. for(let i = 0; i<= len; i++){
    67. temp = getNumber(arr1[i]) + getNumber(arr2[i]) + temp
    68. result[i] = temp % 10
    69. temp = temp > 9 ? 1 : 0
    70. }
    71. result.reverse()
    72. return result[0] > 0 ? result.join('') : result.join('').slice(1)
    73. }
    74. }
    75. add('111324324', '3241412342134')