• Object.assign({},object)与深浅拷贝


    0.起因

    学习前辈的代码,发现有个地方用到了Object.assign这个我之前没见过的东西,就看了看具体是个什么东西,发现它在对象拷贝方面挺666的,故做记录。

    1.用法

    Object.assign(生成对象,拷贝对象)
    该方法用于将所有自有的可枚举的属性的值从一个或多个源对象复制到目标对象,并返回目标对象。

    具体的可以看这个链接所说的

    以两个不同的拷贝方式举例子

          let object = {
            oil: "-",
            produce: "-",
            net: "-",
            hot: "-",
            CO2: "-",
          };
          let object2 = Object.assign({}, object);
          console.log("Before///object2: ", object2);
          let equalObject2 = object;
          console.log("equalObject", equalObject2);
    
          object.oil = "ooooooChange";
          console.log("After///object2: ", object2);
          console.log("equalObject", equalObject2);
    
    

    结果如下

    2.深浅拷贝

    1.拷贝的两层含义,对应了浅拷贝和深拷贝的概念,做了第一层,就是浅拷贝,做到第二层,就是深拷贝。

    2.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用。

    3.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”。

    2.思考

    Object.assign()方法复制的是源对象的属性值,如果源对象的属性是指向另一个对象的引用,那么它只会复制这个引用值(浅复制),不会深复制这个引用值所引用的对象。

    __ 注意 __
    如果只有一层可以用Object.assign深拷贝,多级树形结构用JSON.parse(JSON.stringify(...))。否则拷贝过来的还是其地址(浅拷贝),妹有做到深拷贝。

    使用Object.assign生成的object2是深拷贝,拿过来是什么就是什么,拷贝的object改变也不会影响它的值。
    直接用等号的就是浅拷贝,object改变也会影响equalObject的改变。

    人生到处知何似,应似飞鸿踏雪泥。
  • 相关阅读:
    将python 中的变量保存到本地
    Docker 安装
    docker 守护进程
    迁移及配置 Windows 7 的用户账号 UserProfile 默认目录位置
    Bitwise Operation位操作(逻辑运算)
    博客园客服端上传文章测试
    vnc连接远端linux服务器
    linux7.5服务器 安装oracle12c
    linux服务器 jboss-7安装
    day11__函数名的应用,python新特f-strings格式化输出、迭代器
  • 原文地址:https://www.cnblogs.com/lepanyou/p/15508515.html
Copyright © 2020-2023  润新知