• JS浅拷贝和深拷贝


    在JS中,深浅拷贝是相对于对象来说的,对象里面嵌套了对象的时候,才有深浅拷贝的区别。

    浅拷贝中,嵌套的对象只是一个引用,当原来的对象改变的时候,拷贝后的也会跟着改变。

    let people = {
        age: 18,
        friend: {
            name: "原来的名字"
        }
    };
    // 浅拷贝
    let peopleCopy = {};
    for (let key in people) {
        peopleCopy[key] = people[key];
    }
    peopleCopy.age = 20;
    peopleCopy.friend.name = 'qwe';
    console.log(people);
    console.log(peopleCopy);
    

    输出的结果:

    { age: 18, friend: { name: 'qwe' } }
    { age: 20, friend: { name: 'qwe' } }
    

    浅拷贝中基本类型是独立的,拷贝后的age改变,原对象不会改变,但是浅拷贝的对象中嵌套的对象改变后,原来的对象也跟着改变。

    深拷贝就是将嵌套的对象也进行拷贝。这里就能使用递归来实现深拷贝了。

    // 深拷贝-递归拷贝
    let people = {
        age: 18,
        friend: {
            name: "原来的名字"
        }
    };
    function deepCopy(obj) {
        let peopleCopy = {};
        for (let key in obj) {
            if (typeof (obj[key]) === 'object') {
                peopleCopy[key] = deepCopy(obj[key]);
            } else {
                peopleCopy[key] = obj[key];
            }
        }
        return peopleCopy;
    }
    let result = deepCopy(people);
    result.age = 30;
    result.friend.name = '修改过的名字';
    console.log("原对象:", people);
    console.log("深拷贝的对象:", result);
    

    深拷贝结果:

    原对象: { age: 18, friend: { name: '原来的名字' } }
    深拷贝的对象: { age: 30, friend: { name: '修改过的名字' } }
    
  • 相关阅读:
    C++ Vector
    难点目录
    学习图片展
    使用Github总结
    更改git bash默认的路径
    kubernetes dashboard 搭建参考
    vCenter 6.5 Appliance安装问题汇总
    转-Linux访问Windows FTP服务器中文乱码
    安装升级libpcap至1.9.0
    kubectl patch
  • 原文地址:https://www.cnblogs.com/to-red/p/12450607.html
Copyright © 2020-2023  润新知