zoukankan      html  css  js  c++  java
  • 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: '修改过的名字' } }
    
  • 相关阅读:
    【转】fastjson-1.2.47-RCE
    某安全设备未授权访问+任意文件下载0day
    关于伴侣
    【转】Why BIOS loads MBR into 0x7C00 in x86 ?
    【生活】北京旅游攻略
    利用Python读取图片exif敏感信息
    A MacFUSE-Based Process File System for Mac OS X
    linux-强制断开远程tcp连接
    Navicat use HTTP Tunnel
    python mac下使用多进程报错解决办法
  • 原文地址:https://www.cnblogs.com/to-red/p/12450607.html
Copyright © 2011-2022 走看看