zoukankan      html  css  js  c++  java
  • 数组和对象的深浅克隆

    克隆obj

    Object.assign():对象合并,实现对象的浅克隆

    画图理解

    对象展开运算符

    {...obj},展开运算符,也只能展开第一级,也是浅克隆。

    let newObj = {
    ...obj
    }

    深克隆 json.parse(json.stringify())

    封装一个深克隆函数

    代码啊

    let obj = {
        a:11,
        b:[1,2,3],
        c:{x:11},
        s:function(){},
        d:/^d+$/,
        e:new Date()
    }
    
    function clonedeep(obj){
        const constructor = obj.constructor;
        if (obj === null) return null;
        if(typeof obj !== "object") return obj;
        if(/^(RegExp|Date)$/i.test(constructor.name)) return new constructor(obj)
        let clone = new constructor()
        for(let key in obj){
            if(!obj.hasOwnProperty(key)) break;
            clone[key] = clonedeep(obj[key])
        }
        return clone
    }
    
    let newobj = clonedeep(obj)
    console.log(obj,newobj)
    console.log(newobj === obj)  //false
    console.log(newobj.b === obj.b)  //false
    console.log(newobj.c === obj.c) //false
    console.log(newobj.d === obj.d) //false
    console.log(newobj.s === obj.s)
    
    
    
  • 相关阅读:
    安装完openfire之后打不开的解决方案
    iOS中动画的简单使用
    iOS中的多线程及GCD
    iOS 架构模式-MVVM
    iOS
    iOS 下拉刷新 上拉加载实现原理
    iOS
    iOS 中的XML解析代码(SAX)
    iOS
    iOS中的网络请求 和 网络监测
  • 原文地址:https://www.cnblogs.com/loveliang/p/14050850.html
Copyright © 2011-2022 走看看