zoukankan      html  css  js  c++  java
  • 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的改变。

    人生到处知何似,应似飞鸿踏雪泥。
  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/lepanyou/p/15508515.html
Copyright © 2011-2022 走看看