JavaScript 深拷贝和浅拷贝的实现、使用场景和存在的问题
浅拷贝
实现
方式 1(ES 5 语法):
const params = Object.assign({}, state.dataForm)
方式 2(ES 6 语法):
const params = { ...state.dataForm }
使用场景
copy 入参和出参
深拷贝
方式 1(手动实现):
/*** 深拷贝* @param obj*/
export const deepCopy = <T>(obj: T): T => {if (obj === null || typeof obj !== "object") {return obj;}if (Array.isArray(obj)) {const arrCopy = [] as any[];obj.forEach((item, index) => {arrCopy[index] = deepCopy(item);});return arrCopy as any;}const objCopy = {} as { [key: string]: any };Object.keys(obj).forEach((key) => {objCopy[key] = deepCopy((obj as { [key: string]: any })[key]);});return objCopy as T;
};
方式 2(第三方):
yarn add lodashimport cloneDeep from 'lodash/cloneDeep';
const params = cloneDeep(state.dataForm);
使用场景
需要保留变量状态
存在的问题
浅拷贝只会复制对象的第一层属性,对于嵌套的对象或数组,拷贝的仍然是引用而不是值。这样会导致修改浅拷贝对象的嵌套属性时,原对象的相应属性也会被修改。
相关文章:
JavaScript 深拷贝和浅拷贝的实现、使用场景和存在的问题
浅拷贝 实现 方式 1(ES 5 语法): const params Object.assign({}, state.dataForm)方式 2(ES 6 语法): const params { ...state.dataForm }使用场景 copy 入参和出参 深拷贝 方式 1(手…...
8个常用的辅助函数!!
在开发各种项目时,我们会发现经常需要一些辅助函数来帮助我们实现一些需求,并且这些函数是在很多项目里都可以进行复用的。下面我就列出我们一些常用的辅助函数,来帮助大家在开发项目时,进行复用。 1. 首字母大写 将字符串的第一…...
服务器数据恢复—OceanStor存储中NAS卷数据丢失如何恢复数据?
服务器存储数据恢复环境&故障: 华为OceanStor某型号存储。工作人员在上传数据时发现该存储上一个NAS卷数据丢失,管理员随即关闭系统应用,停止上传数据。这个丢失数据的卷中主要数据类型为office文件、PDF文档、图片文件(JPG、…...
54.Python-web框架-Django-免费模板django-datta-able
1.Datta Able Django介绍 Detta Able Djiango是什么 Datta Able Django 是一个由AppSeed提供的开源Django管理面板,基于现代设计,为开发者提供了一流的功能和优雅的界面。它源自CodedThemes的高风格化Bootstrap 4模板——Datta Able Bootstrap Lite&…...
XP系统安装Node.js v8.6.0并搭建Vue2开发环境(项目兼容到Vista的IE9浏览器)
下载并安装Node.js v8.6.0 通常我们开发Vue2项目,是通过vue create命令建立Vue2工程,用npm run serve命令启动Vue2网站的。 vue命令是用JavaScript写的,不是用C语言写的,必须要Node.js环境才能运行,由Node.js自带的np…...
redis序列化
文章目录 1、为什么要进行序列化操作?2、序列化方式2.1、自定义序列化2. 2、StringRedisTemplate(重点) 1、为什么要进行序列化操作? 不进行序列化向redis存入数据代码: SpringBootTest class RedisDemoApplicationT…...
IOT-Tree 1.7.0实现了一个类似Node-Red的流程功能
本人一直研究这个软件,1.7.0版本最近刚刚发布,里面有个大变化,增加了消息流的功能,这个功能和IBM的Node-Red很相似。 Node-Red那个图形化流程很多年前就给了我很深刻的印象,我个人理解是,通过这样的图形化…...
nc网络收发测试-tcp客户端\TCP服务器\UDP\UDP广播
netcat(nc): 作用:一个功能强大的网络工具,提供了简单的网络测试和网络编程功能。工作原理:可以用于建立TCP或UDP连接,并发送和接收数据。示例用法: 监听TCP端口:nc -l 1…...
程序员该有怎么样的职业素养
目录 1、持续学习 2、解决问题的能力 3、团队协作能力 4、责任感 5、沟通能力 6、总结 作为一个从业者,我认为对于程序员而言,职业素养是非常重要的。职业素养不仅影响个人的职业发展,也影响团队和企业的整体氛围和效率。在我的职业生涯…...
51交通灯
一、基本原理 利用51单片机控制各个路口红绿灯及时间显示。 设计的重点: 1、各个路口红绿灯亮灭的规则,暂不考虑左转方向; 2、倒计时的实现,利用单片机的定时器进行计数得到秒信号; 3、时间显示:东西南…...
鸿蒙Arkts上传图片并获取接口返回信息
需求: 选择相册图片后,将文件上传到服务器,接口会返回图片地址。 问题: 1、鸿蒙自带的文件上传返回值只会返回上传状态,不会返回接口返回信息。 类似问题 HarmonyOS上传文件以及权限授权_harmonyos中axios上传文件…...
超文本标记语言(HTML)简介
HTML 基础 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是:一组段落、一个重点信息列表、也可以含有图片和数据表。正如标题所示…...
使用thymeleaf直接渲染字符串
目录 一、依赖 二、示例代码 一、依赖 <--JAVA 8--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.7.18</version></dependency><-…...
Spring Boot整合发送QQ邮箱功能
1. 创建Spring Boot项目 使用Spring Initializr(https://start.spring.io/)创建一个新的Spring Boot项目,并添加spring-boot-starter-mail依赖。 2. 添加配置 在application.properties或application.yml文件中添加QQ邮箱的SMTP配置。这里…...
Milvus向量数据库
Milvus 是一个开源的向量数据库,专为处理高维向量数据而设计,常用于大规模向量相似性搜索和基于向量的机器学习应用。它支持高效地管理、搜索和操作嵌入(如文本、图像、音频的特征向量),在推荐系统、图像检索、语义搜索…...
python cls的使用
import threadingclass Test:# new方法用于创建类的实例def __new__(cls, *args, **kwargs):print("__new__:", cls.__class__.__name__)return object.__new__(cls) # 返回实例给init self参数# init用于初始化类的实例,实例由new方法传递过来的…...
idea中maven下载依赖缓慢解决方法
解决IDEA中Maven下载依赖包过慢或报错的问题_maven 下载依赖要很久-CSDN博客...
JS 中的各种距离 scrollTop?clientHeight?
元素的各种距离 DOM 对象 属性描述offsetWidth只读,返回元素的宽度(包括元素宽度、内边距和边框,不包括外边距)offsetHeight只读,返回元素的高度(包括元素高度、内边距和边框,不包括外边距&am…...
继承-进阶-易错点
子类同名方法隐藏父类方法 即使调用不匹配也不会再去父类寻找,而是直接报错 //下面代码输出结果:( )class A { public:void f(){ cout<<"A::f()"<<endl; }int a; };class B : public A { public:void f(int a){c…...
【图论应用】使用多路图(multigraph)对上海地铁站点图建模,并解决最短路径问题
文章目录 1 前言2 导包导入数据集3 创建多路图,导入节点和边信息3 绘制线路图4 计算最短路径 1 前言 最近正在学习图神经网络,先pick up了一些最基础的图论知识并学习了一些好玩的应用。 本文启发于B站视频(BV1LY411R7HJ)&#…...
5个核心技巧快速掌握p5.js Web Editor:从零到创作的艺术编程之旅
5个核心技巧快速掌握p5.js Web Editor:从零到创作的艺术编程之旅 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, be…...
Excalidraw架构图AI分析:基于MCP协议实现草图智能解析与转换
1. 项目概述:当白板工具遇上AI架构师 如果你和我一样,经常在白板上画架构图、流程图,然后花大量时间整理成规范的文档,那你一定会对这个项目感兴趣。 excalidraw-architect-mcp 不是一个独立的应用,而是一个 MCP&a…...
别再死记硬背了!用‘配对’思想图解二次剩余,5分钟理解勒让德符号
用配对游戏破解二次剩余:勒让德符号的视觉化理解指南 数论中那些看似晦涩的概念,往往只需要换个角度就能豁然开朗。想象你手里有一副特殊的扑克牌,每张牌代表一个数字,而你要玩的游戏是找到那些能完美配对的数字——这就是理解二次…...
告别硬编码:模板引擎的加载逻辑与层叠继承艺术
更多内容请见: 《Python Web项目集锦》 - 专栏介绍和目录 文章目录 前言:被低估的视图半壁江山 第一章:破除迷信——Django 模板的设计哲学 1.1 限制的威力:为什么没有乘法器和复杂表达式? 1.2 两种角色的对立统一 第二章:寻宝游戏——模板加载器的底层引擎 2.1 TEMPLATE…...
终极魔兽争霸3兼容性修复指南:WarcraftHelper让你的经典游戏重获新生
终极魔兽争霸3兼容性修复指南:WarcraftHelper让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III…...
内网开发环境救星:保姆级教程搞定Docker与Docker Compose离线安装(附避坑清单)
内网开发环境救星:保姆级教程搞定Docker与Docker Compose离线安装(附避坑清单) 在企业级开发环境中,内网隔离是常见的安全策略,但这也给技术栈的部署带来了挑战。想象一下,当你需要在完全离线的环境中搭建一…...
qmc-decoder:专业QMC音频文件解密转换工具
qmc-decoder:专业QMC音频文件解密转换工具 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder qmc-decoder是一款高效、专业的QMC音频文件解密转换工具,…...
YOLOv8植物病害识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)
摘要 植物病害是威胁全球农业产量与质量的主要因素之一,传统的人工识别方法依赖专家经验,效率低、主观性强。本文基于YOLOv8目标检测算法,构建了一套涵盖30类植物及其叶片病害的检测系统,包括苹果、玉米、马铃薯、番茄、葡萄等主…...
年终述职的“数据思维”:用指标和案例讲好你的技术故事
测试人的述职困境又到年终,述职报告像一场无法回避的考试。对于软件测试从业者而言,这往往比定位一个偶发崩溃的缺陷更难——我们习惯了与代码、用例、缺陷打交道,却常常在总结自己一年的价值时陷入沉默。“保障了产品质量”“完成了测试任务…...
赣州威视智投GEO优化服务
在数字化浪潮席卷的当下,赣州本地商家面临着线上曝光不足、流量少、排名靠后的经营难题。如何在激烈的市场竞争中脱颖而出,实现精准获客与稳定引流,成为众多商家亟待解决的问题。赣州威视智投科技有限公司(以下简称“威视智投”&a…...
