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...)    注意前边是一个空对象。

    总结

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

  • 相关阅读:
    Json-lib使用 转载
    利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
    web 模板 类似京东左侧的导航栏
    常见挂马方式
    JS挂马攻防
    代码中的202.102.100.100
    利用Jquery获取、设置iframe中元素
    [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
    js验证输入的金钱格式
    js获取当前对象的颜色判断改变颜色
  • 原文地址:https://www.cnblogs.com/hqkbk/p/13714903.html
Copyright © 2011-2022 走看看