zoukankan      html  css  js  c++  java
  • 对象、数组的深拷贝和浅拷贝

    JavaScript的数据类型分为基本数据类型和引用类型。二者在内存中存放的方式不同,导致了其赋值时差异。

    基本类型值
      基本类型值指的是存储在栈中的一些简单的数据段,在JavaScript中基本数据类型有String,Number,Undefined,Null,Boolean。

      基本类型是按值访问的,从一个变量复制基本类型的值到另一个变量后这两个完全独立的,即使一个变量改变了也不会影响到第二个变量。

    引用类型值
      引用类型值是引用类型的实例,它是保存在堆内存中的一个对象,引用类型是一种数据结构,最常用的是Object,Array,Function类型。

    浅拷贝:

      基本数据类型赋值时,给的是实实在在的数据值 ,赋值后二者只是值一样而已,不会相互影响; 而引用类型,给的是原数据的引用地址,所以新旧数据会互相影响,因为本质上还是同一个数据对象,浅拷贝就是基于表面的拷贝方式;当属性值为对象类型时,只拷贝了对象数据的引用地址,导致新旧数据没有完全分离,还会互相影响。

    深拷贝:

      深拷贝就是 ‘完全’拷贝,也就是两个不一样的引用地址,拷贝之后新旧数据完全分离,不再共用对象类型的属性值,不会互相影响。

    实现方式:

      JSON.parse(JSON.stringify(Obj))    不能深拷贝属性值是函数的对象。

      Object.assign({},obj1,obj2...)    注意前边是一个空对象。

    总结

      要理解造成浅拷贝的原因:对象类型数据复制时,复制了引用地址,用的还是同一个数据对象;所以实现深拷贝的方式就是要对 对象类型属性值递归进行深拷贝,避免直接赋值。

  • 相关阅读:
    docker进入mysql命令窗口
    dyoYQoyfRb
    2018icpc 徐州h题
    求逆元
    取模的n种情况
    Eratos筛法(筛选素数)
    扩展欧几里得
    函数库里有三角函数 和反三角函数
    HDU2795线段树入门 简单查询和修改
    快速排序 分析
  • 原文地址:https://www.cnblogs.com/hqkbk/p/13714903.html
Copyright © 2011-2022 走看看