美文网首页JavaScript
js实现深度克隆

js实现深度克隆

作者: 邢走在云端 | 来源:发表于2019-10-21 21:30 被阅读0次

方法一

硬刚法(迭代法,适用于所有)

function deepClone(obj) {
    let newObj = Array.isArray(obj) ? [] : {}
    if (obj && typeof obj === "object") {
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = (obj && typeof obj[key] === 'object') ? deepClone(obj[key]) : obj[key];
            }
        }
    } 
    return newObj
}
const newObj = deepClone(oldObj));

方法二

利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象

const newObj = JSON.parse(JSON.stringify(oldObj));

缺点:

  • 如果obj里面有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式。而不是时间对象;

  • 如果obj里有RegExp、Error对象,则序列化的结果将只得到空对象;

  • 如果obj里有函数,undefined,则序列化的结果会把函数或 undefined丢失;

  • 如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null

  • JSON.stringify()只能序列化对象的可枚举的自有属性,例如 如果obj中的对象是有构造函数生成的, 则使用JSON.parse(JSON.stringify(obj))深拷贝后,会丢弃对象的constructor;

方法三

const newObj = Object.assign([],oldObj);

缺点

  • Object.assign只对顶层属性做了赋值,完全没有继续做递归之类的把所有下一层的属性做深拷贝。
    简而言之,第一层实现了深度拷贝,后续层次还是浅拷贝

相关文章

  • js克隆

    实现 js 深度克隆 执行结果如下:

  • JS实现深度克隆

    一、概念 深度克隆:深度克隆的新对象可以完全脱离原对象,我们对新对象的修改不会反映到原对象中 二、知识点储备: 1...

  • JS深度克隆实现

  • js实现深度克隆

    方法一 硬刚法(迭代法,适用于所有) 方法二 利用JSON.stringify 将js对象序列化(JSON字符串)...

  • js 浅拷贝和深拷贝

    js实现深拷贝(深度克隆)[https://www.cnblogs.com/cirry/p/13395291.ht...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • 深度克隆

    实现深度克隆

  • js实现通用深度克隆

    我们知道对于原始类型以及对象类型中的函数是可以直接通过“=”复制来实现克隆,而对于对象和数组,则需要遍历每一个元素...

  • JS如何实现深度拷贝(克隆)

    深拷贝(深度克隆)的特点:拷贝的时候生成新数据,修改拷贝以后的数据不会影响原数据。拷贝的数据里如果有对象或者数组,...

  • js深度克隆

网友评论

    本文标题:js实现深度克隆

    本文链接:https://www.haomeiwen.com/subject/npvxvctx.html