zoukankan      html  css  js  c++  java
  • 浅拷贝,深拷贝

    深拷贝:增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存

    1.递归递归去复制

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

    2、JSON.parse(JSON.stringify(o))

    function deepCopy(o) {
        return JSON.parse(JSON.stringify(o))
    }
    
    var c = {
        age: 1,
        name: undefined,
        sex: null,
        tel: /^1[34578]d{9}$/,
        say: () => {
            console.log('hahha')
        }
    }
    // { age: 1, sex: null, tel: {} }
    需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)

    浅拷贝:是增加了一个指针指向已存在的内存地址

    1、= 复制

    let a=[0,1,2,3,4],b=a;
    console.log(a===b);   //true
    a[0]=1;
    console.log(a);  //[1, 1, 2, 3, 4]
    console.log(b)  //[1, 1, 2, 3, 4]

    2、object.assign(target,source)

  • 相关阅读:
    Windows下压缩成tar.gz格式
    mysql 创建索引和删除索引
    jQuery鼠标事件
    MySql like模糊查询使用详解
    eclipse不能更改设置tomcat 中的ServerLocation问题
    eclipse安装tomcate插件步骤
    php折线图 布局图
    mysql 存储过程详解 存储过程
    解决Toad for Oracle显示乱码问题
    Readings in Databases
  • 原文地址:https://www.cnblogs.com/init00/p/12612321.html
Copyright © 2011-2022 走看看