手写一个递归实现深克隆

       let obj = { a: 10, b: '100', c: /^\d+$/, d: [10, 20, 30], e: { l: 50 }, f: new Date() }

        // 深拷贝

        function cloneDeep(obj) {

            // 根据obj为对象或者数组,产生一个空的对象或数组,存放数据

            let newobj = obj instanceof Array ? [] : {}

            //先判断特殊类型

            if (obj instanceof RegExp) return new RegExp(obj)

            if (obj instanceof Date) return new Date(obj)

            //   for循环

            for (let k in obj) {

                // 1.判断对象的第一个属性是否为数组或者对象,如果是,则进入递归

                if (typeof obj[k] === 'object') {

                    newobj[k] = cloneDeep(obj[k])

                } else {

                    // 2.如果数据为基本类型,则直接赋值

                    newobj[k] = obj[k]

                }

            }

            // 6.把存放了数据的新对象返回出去

            return newobj

        }

        let obj2 = cloneDeep(obj)

        console.log(obj, obj2);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。