• js 深拷贝+浅拷贝


    • JS数据类型

      1.基本类型(栈数据)

        String、Number、Boolean、undefined、null

        2.引用类型(堆数据)

        Object(常用的包括Function、Array、Date、RegExp等)

      PS:堆和栈的区别

      值类型是存在栈里的,存取速度都很快。

      栈的特点:先进后出,类似羽毛球桶,先放进去的羽毛球,要想拿出来,必须先把后放进去的羽毛球拿出来。

      引用类型的真实数据存在堆里。

      堆的特点:堆就像一个仓库,随机存,直接取,没有像栈这么麻烦。栈中只保存了引用地址,真实数据其实存在堆里,如果想要获取真实的数据,就要通过引用地址去堆里找。

    • 深浅拷贝

      深拷贝和浅拷贝都只针对引用数据类型,浅拷贝会对对象逐个成员依次拷贝,但只复制内存地址,而不复制对象本身,新旧对象成员还是共享同一内存;深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

      区别:浅拷贝只复制对象的第一层属性,而深拷贝会对对象的属性进行递归复制。

      1.浅拷贝

      浅拷贝的方法:Object.assign()、slice、concat、ES6的...扩展符均为浅拷贝

      2.深拷贝

      深拷贝的方法:

      (1)JSON.parse(JSON.stringify(obj)),缺点是无法对function进行操作

        原理:用JSON.stringify()将对象转成字符串,再用JSON.parse()把字符串解析成对象。(会在堆内存开辟一个新的空间存放这个对象)

      (2)遍历对象对子项赋值来进行深拷贝(一定要考虑到对象中有引用对象的情况)

       参考链接:https://www.jb51.net/article/192518.htm  

            https://blog.csdn.net/qq_39353677/article/details/105222873

          

  • 相关阅读:
    Chip Factory(HDU5536 + 暴力 || 01字典树)
    Xor Sum(HDU4825 + 字典树)
    Happy Matt Friends(HDU5119 + dp)
    Intersection(HDU5120 + 圆交面积)
    [iOS Animation]-CALayer 绘图效率
    [iOS Animation]-CALayer 性能优化
    [iOS Animation]-CALayer 定时器动画
    [iOS Animation]-CALayer 缓冲
    [iOS Animation]CALayer-图层时间
    [iOS Animation]-CALayer 显示动画
  • 原文地址:https://www.cnblogs.com/betty818/p/14592440.html
Copyright © 2020-2023  润新知