当前位置: 首页 > news >正文

深拷贝与浅拷贝的理解

  1. 浅拷贝的理解

浅拷贝的话只会拷贝基本数据类型,例如像string、Number等这些,类似:Object、Array 这类的话拷贝的就是对象的一个指针(通俗来讲就是拷贝一个引用地址,指向的是一个内存同一份数据),也就是说当拷贝的对象数据发生变化,原始数据也会跟着发生改变,是相互影响的。

补充:浅拷贝的话只会拷贝数据的第一层,更深层的是无法拷贝。

代码注解如下所示:常用的写浅拷贝方案:我这里用的是Object.assign() 方法

  let person={name:"zhang",age:18,arr:[1,2,3],abj:{a:1,b:2,c:3}}let copyObj=Object.assign({},person)console.log(copyObj)//name:'zhang',age: 18, arr:[2,2,2], abj: {a: 'hhahahha', b: 2, c: 3}copyObj.name=18copyObj.arr=[2,2,2] copyObj.abj.a="hhahahha"console.log(copyObj.name,"copyObj") //18,"copyObj"console.log(person.name,"person") //zhang personconsole.log(copyObj.arr,"copyObj") // [2, 2, 2] 'copyObj'console.log(person.arr,"person") // [1, 2, 3] 'person'console.log(copyObj.abj.a,"copyObj")//hhahahha copyObjconsole.log(person.abj.a,"person")//hhahahha person

深拷贝的理解:

深拷贝不仅对指针进行了拷贝,还对指针指向的内容进行了拷贝,也就是说另外申请了一块内存空间,内容和原对象一致,但是两份独立的数据,更改原对象时拷贝的对象是不会发生变化的。

代码注解如下所示:我这里实现深拷贝的方法是JSON 对象的序列化和反序列化方法实现的.

注意这个方法function,undefine 会丢失

        let person={name:"zhang",age:18,arr:[1,2,3],abj:{a:1,b:2,c:3}}let copyobj=JSON.parse(JSON.stringify(person))console.log(copyobj)//{name: 'zhang', age: 18, arr: [1,2,3], abj: { a:1,b:2,c:3}}copyobj.arr[0]=3console.log(copyobj.arr) //[3, 2, 3] console.log(person.arr)//[1, 2, 3]

http://www.lryc.cn/news/20313.html

相关文章:

  • Shell变量
  • Android 8请求权限时弹窗BUG
  • 路漫漫:网络空间的监管趋势
  • 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 数据库的基本查询
  • 10 分钟把你的 Web 应用转为桌面端应用
  • Delphi RSA加解密(二)
  • pytorch 深度学习早停设置
  • 【Vue学习】Vue高级特性
  • Android 12.0 系统Settings去掉开发者模式功能
  • buu [NCTF2019]babyRSA 1
  • Java:如何选择一个Java API框架
  • mt6735 MIC 音量的调整及原理介绍
  • 【深度学习】什么是线性回归逻辑回归单层神经元的缺陷
  • Spring拦截器
  • 8个可能降低网站搜索引擎信任度的错误
  • 弱监督论文阅读:P2BNet算法笔记
  • 使用Java编写Hive的UDF实现身份证号码校验及15位升级18位
  • 前端:分享JS中7个高频的工具函数
  • docker基础用法及镜像和容器的常用命令大全
  • Spring(Bean生命周期)
  • 什么是分布式锁?几种分布式锁分别是怎么实现的?
  • 【一天一门编程语言】R 语言程序设计极简教程
  • 记一次顿悟的经历
  • 19_FreeRTOS软件定时器
  • 值得推荐!安利5款良心又好用的小众软件
  • Enhanced ShockBurst (ESB)原文翻译
  • 软件测试之兼容性测试
  • 笔记(一)——容器
  • C++入门:命名空间