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)
    
    
    
  • 相关阅读:
    文件操作类File
    文件流操作
    自动登录和解/加密
    redis---set类型常用命令
    div
    css2
    css-id选择器
    table标签
    段落标签-换行标签
    input-form-select-a-img-ul-dl标签
  • 原文地址:https://www.cnblogs.com/loveliang/p/14050850.html
Copyright © 2011-2022 走看看