深拷贝与浅拷贝的简单理解

2023-11-01

首先说下什么是简单数据类型  什么是复杂数据类型

 简单数据类型有 number(数字型) , null, undfande, booler(布尔值),  string(字符串) 

复杂数据类型 有array(数组)  object(对象) function(函数) 等等

浅拷贝:

1.如果拷贝的是简单数据类型那么就直接拷贝 对原来的数据不会有影响,

2.如果拷贝的是复杂数据类型 那么拷贝的就是地址 和原来的公用一个数据  只要修改原数据就会受影响

浅拷贝的方式有 :

1.{...obj} 解构的方式

2.Object.assign(obj)

深拷贝:

就是把复杂数据类型也完全复制一份新的出来(指向新的地址),两份数据互不影响

1.先将需要拷贝的代码利用 JSON.stringify 转成字符转,然后再利用JSON.parse 将字符转转回对象,即完成拷贝.但是这种方法有缺点:

  • 造成数据丢失和数据异常
  • function、undefined 直接丢失
  • NaN、Infinity 和-Infinity 变成 null
  • RegExpError对象只得到空对象;

2.就是利用递归 ,

处理函数 Symbol 正则 Error 等数据类型正常拷贝

// 日期格式
if (obj instanceof Date) {
  return new Date(obj)
}
// Symbol
if (obj instanceof Symbol) {
  return new Symbol(obj)
}
// 函数
if (obj instanceof Function) {
  return new Function(obj)
}
// 正则
if (obj instanceof RegExp) {
  return new RegExp(obj)
}

自己写的递归容易造成死循环 解决思路就是 吧每次拷贝的数据进行存储,然后拷贝之前看看存储的数据中是否有要拷贝的数据 如果有就直接返回出来用 如果没有就进行拷贝

3.lodash里面有写好的方法 也可以拿来直接用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深拷贝与浅拷贝的简单理解 的相关文章

  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 狂神说Mybatis课程笔记

    文章目录 1 第一个Mybatis程序 1 1 搭建环境 1 2 创建一个模块 1 3 编写代码 1 4 测试 2 CURD 增删改查 2 1 namespace 2 2 Select insert update delete 2 3 分析
  • 测试多线程任务

    作业需求 任务1 定义一个全局变量 int a 10 主线程能否访问到 分支线程能否访问到 任务2 分支线程中修改上述的a 20 问主线程中访问该a 是10还是20 任务3 在主线程定义一个局部变量int b 1 分支线程能否访问到b 任务
  • 光纤光缆基础知识

    光纤介绍 光纤布线中使用光波的几个波段 800nm 900nm 短波波段 1250nm 13500nm 短波波段 1500nm 1600nm 短波波段 多模光纤运行波长为850nm或1300nm 而单模光纤运行波长则为1310nm或1550
  • 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权

    点击关注 芋道源码 2022 09 05 10 32 发表于上海 收录于合集 芋道源码1000个 点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创
  • 使用BPMN和微服务进行编排 ——是好做法还是坏做法?

    马丁 Martin Fowler 在他著名的微服务文章中建议 敏捷的终端和愚笨的管道 他指出 微服务社区赞成另一种方法 敏捷的终端和愚笨的管道 从微服务构建的应用程序旨在尽可能地解耦和衔接 他们拥有自己的域逻辑 而更多地在经典的Unix意义
  • c语言指针实现冒泡排序及其优化

    冒泡排序是一个十分容易实现的算法 简单说明一下 假设数组长度为 N 要求从小到大排序 1从第一个数开始比较相邻两个元素 如果前面的数据大于后面的数据 就将二个数据交换 2对数组元素进行一次第一次遍历后 最大的数据就 沉 到了数组最后一个位置
  • 03_GCC与Makefile的使用

    windows下c语言的编译 1 预处理 把 h c展开形成一个文件 宏定义直接替换 还有头文件 库文件的展开形成 i文件 对应的GCC gcc e hello c o hello i 2 汇编 生成汇编文件 gcc s hello i o
  • 【Elasticsearch】ElasticSearch 7.8 多字段权重排序

    1 概述 转载并且补充 https mp weixin qq com s 0g86s o7kgn8ZUxA3UBc0w 请看原文 读者提问 ES 的权重排序有没有示列 参考参考 刚好之前也稍微接触过 于是写了这篇文章 可以简单参考下 在很多
  • msi文件安装MySQL

    文章目录 步骤如下 1 官网下载msi安装文件 2 运行MySQL installer 3 通过MySQL installer配置服务 4 验证 5 安装目录介绍 6 修改指定的数据文件 步骤如下 1 官网下载msi安装文件 官网地址 上述
  • 爬虫入门(三)连接mongodb

    连接mongodb 虽然说我们前面写了一个比较健壮的爬虫了 但是人生难免有意外 万一中断了 我们又要重新开始爬虫下载图片了 抓狂 那么我们想呢 怎么写一个判断图片有没有下载过呢 显然我们不能在文件夹里遍历 会慢到爆炸的 那么我们就可以借助数
  • 深度学习目标检测工具箱mmdetection,训练自己的数据

    文章目录 一 简介 二 安装教程 1 使用conda创建Python虚拟环境 可选 2 安装PyTorch 1 1 3 安装Cython 4 安装mmcv 5 安装mmdetection 6 测试Demo 7 准备自己的数据 8 训练 一
  • 一篇文章掌握整个JVM,JVM超详细解析!!!

    不懂JVM看完这一篇文章你就会非常懂了 文章很长 非常详细 先想想一些问题 1 我们开发人员编写的Java代码是怎么让电脑认识的 首先先了解电脑是二进制的系统 他只认识 01010101 比如我们经常要编写 HelloWord java 电
  • R语言-解决问题:程辑包‘xxx’是用R版本3.3.4 来建造的

    用R的时候会碰到这种情形 warning 程辑包 xxx 是用R版本3 3 4 来建造的 尽管R这样提示 但是不影响这个包的使用 因此是可以继续用的 只是它会有这样的提示而已 出现这种警告的原因是自己电脑上的R版本不是最新的了 需要更新 如
  • Java网络编程——NIO编程

    目录 第一部分 NIO介绍 1 NIO三大核心部分 2 NIO的工作机制 3 Java NIO的非阻塞模式 第二部分 NIO和BIO的比较 第三部分 NIO三大核心原理 第四部分 缓冲区 Buffer 1 缓冲区基本介绍 2 Buffer常
  • python爬虫——post方式

    1 Ajax Ajax是一种在无需重庆加载整个页面的情况下 能够更新部分页面的技术 如下 在谷歌浏览器中按F12查看抓包 点击network xhr 表示是ajax 点击其中一个可以看见是post方式 当你一个字母一个字母慢慢输入时 你会抓
  • 修复 ChatGPT 发生错误的问题

    目录 ChatGPT 发生错误 请参阅如何修复连接错误 修复 ChatGPT 发生错误的问题 基本故障排除技巧 检查 ChatGPT 的服务器状态 检查 API 限制 检查输入格式 清除浏览数据 香港DSE是什么 台湾指考是什么 王湘浩 生
  • python add argument list_python链表:TypeError: add() missing 1 required positional argument: 'item'。这个...

    展开全部 python 2 6用add很正常啊 add看起来没啥问题 到是别的函数有些小问题 1 remove前判断下这个item是不是存在 2 if curNode is head 应该是 if curNode is self head
  • Docker容器时间与宿主机差8小时

    近日测试提了个bug说是登录时间比北京时间晚了8个小时 发现是docker容器的问题 Linux下用date查看的时间与在docker容器里面用date查看的时间相差8小时 docker容器里默认是 UTC 时间 本人用一下两种方式尝试了均
  • 字符串哈希

    方法 字符串前缀哈希法 用 h 存储前缀的哈希值 将字符串转成对应的哈希值 看成p进制的数 例 ABCD 1 2 3 4 gt 1 p 3 2 p 2 3 p 1 4 p 0 mod q 技巧 p 131或1331 q 2 64 用usin
  • 深拷贝与浅拷贝的简单理解

    首先说下什么是简单数据类型 什么是复杂数据类型 简单数据类型有 number 数字型 null undfande booler 布尔值 string 字符串 复杂数据类型 有array 数组 object 对象 function 函数 等等