• 深拷贝、浅拷贝


    浅拷贝:值的引用指向新的变量,当新的变量的值有改动,那么被拷贝的变量的值也会跟着 变动

    深拷贝:申请一个新的内存空间,将被拷贝的值复制到新的内存中。拷贝变量的值改变,被拷贝的变量的值 不会改变

    实现深度拷贝

        1、JSON.stringify()

    function deepClone(obj) {
    
        let temp = JSON.stringify(obj);
        let result = JSON.parse(temp);
        
        return result;
    }
    

        2、for...in 遍历和复制

    function deepClone(obj) {
        let result = typeof  obj.splice === "function" ? [] : {};
        if( obj && typeof obj === 'object' ) {
            for( let key in obj) {
                if (obj[key] && typeof obj[key] === 'object') {
                    result[key] = deepClone(obj[key]);
                } else {
                    result[key] = obj[key];
                }
            }
            return result;
        }
        return obj;
    }
    

        3、Array.prototype.forEach

    function deepClone(obj) {
        let copy = Object.create(Object.getPrototypeOf(obj));
        let propNames = Object.getOwnPropertyNames(obj);
        propNames.forEach(function (items) {
            let item = Object.getOwnPropertyDescriptor(obj, items);
            Object.defineProperty(copy, items, item);
    
        });
        return copy;
    }
    

    实现浅拷贝

        Object.assign()

            如果对象或者数组只有一级属性没有二级属性,那么assign()方法是深拷贝。像下面的第一个例子

            如果有二级属性,那么二级以后的属性就是浅拷贝。下面的第二个例子

    let a = ["ASD", "666", "ECC", "BCC"];
    let b = [];
    Object.assign(b, a);
    b[0] = "QQQ";
    console.log(`Value of a: ${a}, Value of b: ${b}`); 
    // Value of a: ["ASD", "666", "ECC", "BCC"], Value of b: ["QQQ", "666", "ECC", "BCC"]
    
    let a = a = ["ASD", "666", "ECC", "BCC", {"name": 1, "age": 2}]
    let b = [];
    Object.assign(b, a);
    b[4].name = "QQQ";
    console.log(`Value of a: ${a}, Value of b: ${b}`); 
    // Value of a: ["ASD", "666", "ECC", "BCC", {"name": "QQQ", "age": 2}], Value of b: ["ASD", "666", "ECC", "BCC", {"name": "QQQ", "age": 2}]
    

      

  • 相关阅读:
    [NOI2014]动物园
    [NOI2014]起床困难综合症
    bzoj2688 Green Hackenbush
    luogu P2575 高手过招
    [NOI2015]荷马史诗
    win10系统U盘读取不了怎么解决 三种方法快速解决"文件或目录损坏且无法读取& 发布时间:2020-06-05 09:19:46 作者:佚名 我要评论
    在 Linux 中,最直观、最可见的部分就是 文件系统(file system)
    GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充
    docker 分层 隔离
    DNS和BIND
  • 原文地址:https://www.cnblogs.com/Lyh1997/p/14352159.html
Copyright © 2020-2023  润新知