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]
    

      

  • 相关阅读:
    cmd登录系统用户
    Js操作Cookie
    Tomcat 调优方案
    Oracle 服务启动关闭
    Mysql服务启动与关闭
    JSP中的隐含对象
    JSP指令
    Js的String对象
    js排序
    MyBatis系列目录--5. MyBatis一级缓存和二级缓存(redis实现)
  • 原文地址:https://www.cnblogs.com/wmydb/p/14892550.html
Copyright © 2011-2022 走看看