美文网首页
深拷贝方法整理,以及(...)扩展运算符是不是深拷贝

深拷贝方法整理,以及(...)扩展运算符是不是深拷贝

作者: 叫丽丽啊 | 来源:发表于2024-02-25 17:16 被阅读0次

方式1:JSON.parse(JSON.stringify(obj))

通过JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成一个全的新的对象;

let list = [{ name: 'Tom' }];
let copyList = JSON.parse(JSON.stringify([...list]));
copyList[0].name = 'Jerry'
console.log(list[0].name);      // Tom
console.log(copyList[0].name);      // Jerry

方式2:递归实现

采用递归去拷贝所有层级属性

function deepClone(obj) {
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj === "object") {
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                //判断ojb子元素是否为对象,如果是,递归复制
                if (obj[key] && typeof obj[key] === "object") {
                    objClone[key] = deepClone(obj[key]);
                } else {
                    //如果不是,简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}
let a = [1, 2, 3, 4],
    b = deepClone(a);
a[0] = 2;
console.log(a, b)   // [2,2,3,4]  [1,2,3,4]

(...)扩展运算符是不是深拷贝?

总结:扩展运算符既不是深拷贝,也不是浅拷贝。一半一半,他只能深拷贝第一层,第二层的拷贝还是浅拷贝,当拷贝对象的属性值对应的都是简单的基本类型数据,可以理解为深拷贝。当拷贝对象的属性对应的值为数组或对象等引用类型时,为浅拷贝。所以,还是老实用递归写深拷贝把。JSON的深拷贝不好用,局限性太大了。
扩展运算符是深拷贝还是浅拷贝1
扩展运算符是深拷贝还是浅拷贝2

相关文章

  • 扩展运算符

    关于扩展运算符 深拷贝和浅拷贝

  • js 对象拷贝 浅拷贝 深拷贝

    浅拷贝 Object.assign(target, source) 扩展运算符(...) 深拷贝 乞丐版的深拷贝 ...

  • ES6之扩展运算符-数组

    数组的扩展运算符 (1) 复制数组(深拷贝) 注意点:...扩展运算符号只能是针对一维度的对象或数组进行深拷贝。不...

  • ES6之扩展运算符-对象

    Spread扩展运算符 (1) 复制对象(深拷贝) 拷贝了对象实例的属性对象的扩展运算符(...)用于取出参数对象...

  • javascript 数组以及对象的深拷贝

    ES6扩展运算符实现数组的深拷贝 concat 方法实现数组的深拷贝 它是用于连接多个数组组成一个新的数组的方法。...

  • 对象深拷贝和浅拷贝

    浅拷贝 深拷贝 深拷贝的递归方法 深拷贝的JSON方法

  • es6(...运算符)

    ...运算符可用于浅拷贝 深拷贝 用Object.assign(obj)实现深拷贝 浅拷贝 当然,我们也可以在浅拷...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • es6中扩展运算符...的使用方式

    es6中扩展运算符... 用于参数对象的所有可遍历属性,拷贝到当前对象之中。可以实现深拷贝实现合并数组 实现深浅拷贝

  • 对象的深浅拷贝

    浅拷贝 深拷贝 方法1 方法2

网友评论

      本文标题:深拷贝方法整理,以及(...)扩展运算符是不是深拷贝

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