• 对象、数组的深拷贝和浅拷贝


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

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

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

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

    浅拷贝:

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

    深拷贝:

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

    实现方式:

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

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

    总结

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

  • 相关阅读:
    用BAT使用FTP命令上传文件
    BAT自动复制最新插件至运行程序
    requests模块源码阅读总结
    Lucene查询语法汇总
    Ansible scp Python脚本
    4.2 rust 命令行参数
    4.1 python中调用rust程序
    冒泡排序
    Golang开发命令行工具之flag包的使用
    MySQL基于Binlog的数据恢复实战
  • 原文地址:https://www.cnblogs.com/hqkbk/p/13714903.html
Copyright © 2020-2023  润新知