面试题: 深拷贝和浅拷贝 - 图1

    1. function deepClone(obj,hash = new WeakMap()) {
    2. if(obj == null) return obj
    3. if(typeof obj !== 'object') return obj
    4. if(obj instanceof Date) return new Date(obj)
    5. if(obj instanceof RegExp) return new RegExp(obj)
    6. if(hash.has(obj)) return hash.get(obj)
    7. // 处理数组和对象
    8. let newObj = Array.isArray(obj) ? [...obj] : {...obj}
    9. hash.set(obj,newObj)
    10. Object.keys(newObj).forEach(key => {
    11. newObj[key] = deepClone(newObj[key],hash)
    12. })
    13. return newObj
    14. }
    15. let obj = {
    16. a: [1,2],
    17. b: function() {
    18. console.log(11);
    19. },
    20. c: new Date(),
    21. d: new RegExp(),
    22. }
    23. obj.xxx = obj
    24. let newObj = deepClone(obj)
    25. console.log(newObj);