深拷贝

        function deepCopy(obj) {
            // 判断是否是date
            if (obj.constructor === Date) return new Date(obj)
            //判断是否是RegExp
            if (obj.constructor === RegExp) return new RegExp(obj)

            //如果是基本类型数据直接返回
            if (obj instanceof Object === false) {
                return obj
            }
            //判断数组还是对象
            const result = Array.isArray(obj) ? [] : {}
           //遍历对象中所有的属性
            for (let key of Reflect.ownKeys(obj)) {
                //确认对象的自有属性,而不是继承而来的
                if (obj.hasOwnProperty(key)) {
                    if (typeof obj[key] === 'object') {
                        result[key] = deepCopy(obj[key])
                    } else {
                        result[key] = obj[key]
                    }

                }
            }
            return result
        }
        const obj = {
            reg: new RegExp('/我是一个正则/ig'),
            name: 'lucy', age: 11,
            func: function () { console.log('我是一个函数') },
            date: new Date(0),
            [Symbol('1')]: 1,
            obj: { name: '我是一个对象', id: 1 },
            str: '',
            boolean: true,
            unf: undefined,
            arr: [0, 1, 2]
        }
        let obj1 = deepCopy(obj);
        obj1.arr.push(1)//不会改变obj中的数组
        console.log(obj1.arr, obj.arr)//[0,1,2,1],[0,1,2]

  

原文地址:https://www.cnblogs.com/wmydb/p/14892550.html