zoukankan      html  css  js  c++  java
  • 深拷贝

            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]
    

      

  • 相关阅读:
    VS2013 自动添加头部注释 -C#开发
    在调用Response.End()时,会执行Thread.CurrentThread.Abort()操作
    React
    WebApi基础
    wcf
    memcached系列
    Ioc容器Autofac系列
    使用TortoiseSVN创建版本库
    使用libcurl 发送post请求
    值得推荐的C/C++框架和库
  • 原文地址:https://www.cnblogs.com/wmydb/p/14892550.html
Copyright © 2011-2022 走看看