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);

使用场景

需要保留变量状态

存在的问题

浅拷贝只会复制对象的第一层属性,对于嵌套的对象或数组,拷贝的仍然是引用而不是值。这样会导致修改浅拷贝对象的嵌套属性时,原对象的相应属性也会被修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP中get与post的区别?在传输数据类型上有什么区别?【面试】

HTTP中的GET和POST是两种最常见的请求方法&#xff0c;它们在数据传输和使用场景上有一些关键的区别&#xff1a; GET请求&#xff1a; 数据传输方式&#xff1a;GET请求将数据附加在URL之后&#xff0c;形成查询字符串&#xff08;namevalue的形式&#xff09;&#xff0c;数…

嘻嘻我是图床倒霉蛋

嘻嘻花了将近两个小时的时间配了一个小小的图床 手把手教你搭建阿里云图床(PicGoTypora阿里云OSS)&#xff0c;新手小白一看就会-阿里云开发者社区 (aliyun.com) 大体上按照这篇配置就好 七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云 我买了一…

股指期货功能

其金融期货的本质&#xff0c;决定了股指期货具有以下几方面特点&#xff1a; &#xff08;1&#xff09;交割方式为现金交割&#xff1b; &#xff08;2&#xff09;股指期货的持有成本较低&#xff1b; &#xff08;3&#xff09;股指期货的保证金率较低&#xff0c;杠杆性…

jrt从量变到质变

又是一个加班的周末&#xff0c;上周把台式机代码和数据库环境弄好了&#xff0c;这周进行大数据测试&#xff0c;直接把标本、标本医嘱、报告、报告结果、药敏结果等数据插入到1亿的规模&#xff0c;跑了一天一夜插入了5000多万个标本&#xff0c;后面接着补剩下的到一亿。 演…

jvm工具-jps、jstat、jmap、jstack

一、jps jps -v 【输出进程启动参数】 [rootVM-8-2-centos ~]# jps -v 12401 Jps -Dapplication.home/usr/local/jdk1.8.0_241 -Xms8m 16964 jar 其他参考 Java八股文必看&#xff0c;入门到深入理解jvm虚拟机之基础故障指令【jps&#xff0c;jstate...】-CSDN博客 二、j…

C++二进制文件的读与写

1. 二进制文件的读与写ofstream fout; ifstream fin; ——学习把结构体类型写到二进制文件中。 代码实现&#xff1a; /* _4.cpp 学习总结 视频学习C_Primer_Plus_17_6 1. 二进制文件的读与写 2. 写操作&#xff1a;fout类比cout操作&#xff0c;cout能操作的fout也适用 3. 易…

书生·浦语大模型实战营第二期作业六

1、安装环境&#xff1a; 2、安装legent和agentlego&#xff1a; 3、部署apiserver&#xff1a; 4、legent web demo&#xff1a; 5、没搜到&#xff0c;很尴尬&#xff1a; 6、自定义工具&#xff1a; 7、智能体“乐高”&#xff1a; 8、智能体工具&#xff0c;识别图片&#…

Leetcode274. H 指数(简单易于理解)

题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#x…

Java文件/文件夹的新增/删除/递归遍历

获取File对象 这里的字符串可以乱写&#xff0c;但是如果不存在后续的操作也会失败 // 获取抽象的File对象&#xff08;文件或者目录&#xff0c;不一定真实存在&#xff09;File file1 new File("D:\\2_WorkSpace\\qcbyProject\\shixun\\collection-test\\src\\FileTes…

Java基础 - 注解

注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”&#xff1a; // this is a component: Resource("hello") public class Hello {Injectint n;PostConstructpublic void hello(Param String name) {System.out.println(name);}Overridepublic String…

youlai-boot项目的学习—工程构建与运行

开发环境 系统:mac OS Ventura 13.2.1 终端: item2 Homebrew: 4.3.5 IDE: IntelliJ IDEA 2024.1.1 (Ultimate Edition) 代码分支 仓库&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git 分支&#xff1a; master commit: 9a753a2e94985ed4cbbf214156ca035082e02723 …

C# OpenCvSharp 图像复制-clone、copyTo

在C#中使用OpenCvSharp库处理图像时&#xff0c;clone和copyTo是两个非常常用的函数。理解和合理使用这些函数可以帮助你在图像处理项目中更高效地操作图像数据。本文将详细介绍这两个函数的使用方法&#xff0c;并通过具体的示例来说明它们的实际应用。 1. clone 函数 定义 …

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创&#xff0c;未经授权及许可&#xff0c;严禁引图、转载或加工&#xff0c;违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机&#xff08;Turing machine&#xff09;是一种理论计算模型&#xff0c;由英国数学家阿兰图灵&#xff08;Alan T…

vue-饼形图-详细

显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…

fiddler打开后,requests无法使用

Fiddler实用小技巧 错误情况 打开fiddler后&#xff0c;requests无法请求 requests.exceptions.ProxyError: HTTPSConnectionPool(hosth5api.m.taobao.com, port443): 说明 其实这是一个很小的坑&#xff0c;确也是一个很常见的坑。 在打开fiddler后&#xff0c;根据fiddle…

[C语言] 常用排序算法

冒泡排序 思路&#xff1a; 从小到大&#xff0c;找到集合中最小的放在最左边&#xff0c;在剩下的集合中找到最小的放在最左边以此类推。如何找到最小的&#xff1f;&#xff08;假定左边第一个数就是最小的&#xff0c;让它依次和它右边的比较&#xff0c;如果右边的比它还小…

LaTeX 学习 第1节 数学模型概说

----用教授的方式学习 https://download.csdn.net/download/weixin_38135241/89416392 LaTex 安装包 LaTeX 有多种工作模式&#xff1a;输入一行文字时我们在水平模式&#xff0c;在水平模式上&#xff0c;文字、符号等各种排版元素&#xff0c;也就是各种盒子&#xff0c;都…

厂里资讯之自媒体文章自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

虚拟化技术Docker

Docker在计算机的分类中&#xff0c;主要属于虚拟化技术的一种&#xff0c;并且具体地说&#xff0c;它是基于软件的虚拟化技术。以下是详细的分类和解释&#xff1a; 虚拟化技术分类&#xff1a; 基于硬件的虚拟化&#xff1a;硬件物理平台本身提供了对特殊指令的截获和重定向…

Python|OpenCV-实现识别弧形文字(17)

前言 本文是该专栏的第19篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 我们知道,OCR可以识别文字方面的需求,但是如果遇到那些目标文字是“弧形文字”,需要怎么去识别呢?遇到想要识别“弧形文字”的需求,这个时候你可以借助于Opencv+OCR技术来实现。 而本…