ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数组和对象的深浅克隆

2020-11-27 23:05:02  阅读:225  来源: 互联网

标签:obj log newobj 深浅 数组 constructor console 克隆


克隆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)


标签:obj,log,newobj,深浅,数组,constructor,console,克隆
来源: https://www.cnblogs.com/loveliang/p/14050850.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有