前端深浅拷贝各有哪些方法,优缺点

文章目录

  • 一、深拷贝
      • 1. JSON.parse(JSON.strigify(Str))
      • 2. lodash.deepclone
      • 3. structuredClone
  • 二、浅拷贝
  • 总结


深浅拷贝主要是针对于引用类型而言的

一、深拷贝

1. JSON.parse(JSON.strigify(Str))

   序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 ).传输(例如 如果请求的Content-Type 是 application/x-www-form-urlencoded,则前端这边需要使用qs.stringify(data)来序列化参数再传给后端,否则后端接受不到;

JSON.stringify()

该方法用于将一个字转换为JSON字符串,该字符串符合JSON格式,并且可以被JSON.parse()方法还原。

  • 对于原始类型的字符串,转换结果会带双引号
  • 如果要转换的对象的属性是undefined,函数或xml对象,该属性会被JSON.stringify()过滤
  • 如果要转换的数组中有undefined和函数,他们都会转换为null
  • 正则对象会被转换成空对象
  • 会忽略对象的不可遍历的属性
  • JSON.stringify()方法还可以接受一个数组,作为第二个参数,指定参数对象的哪些属性需要转成字符串,第二个参数还可以是一个函数,用来更改JSON.stringify()的返回值。
  • JSON.stringify()还可以接受第三个参数,用于增加返回的 JSON 字符串的可读性。比如加入‘\t’
  • 如果参数对象有自定义的toJSON()方法,那么JSON.stringify()会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

JSON.parse()

  • JSON.parse()方法用于将 JSON 字符串转换成对应的值。
  • 如果传入的字符串不是有效的 JSON 格式,JSON.parse()方法将报错。
  • JSON.parse()方法可以接受一个处理函数,作为第二个参数,用法与JSON.stringify()方法类似

2. lodash.deepclone

引入lodash 工具库,调用 deepclone 进行深拷贝

3. structuredClone

const original = { name: "MDN" };
original.itself = original;// Clone it
const clone = structuredClone(original);

二、浅拷贝

let arr = [{name:'bruce'},1,2,3]let newArr = arr.slice()
// 由于数组内部属性值为引用对象,因此使用slice和concat对对象数组的拷贝,整个拷贝还是浅拷贝,
// 拷贝之后数组各个值的指针还是指向相同的存储地址。let newArr2 = [...arr]Object.assign()

总结

本文列举深浅拷贝的几种方法

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

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

相关文章

AWS-CDN只能备用域名访问-使用Lambda@Edge(禁止分配的域名访问)

场景:cdn使用备用域名后,希望用户只能从备用域名访问,而不是自动分配的cdn域名,这也将是一个安全漏洞,被扫描到cdn域名访问刷流量等! 【建议部署前查看】参考链接: 1.官方cdn返回示例 2.lambdae…

算法训练第三十九天|62. 不同路径、63. 不同路径 II

62. 不同路径: 题目链接 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有…

云服务配置docker镜像容器以及常用操作命令

首先通过ssh进入云服务器。如何ssh进入云服务器。 简单讲解一下docker中镜像和容器,打个比方,镜像相当于印钱的那个模板,容器相当于从模板上拓下来的钱,不同的模板可以印出不同的钱。但容器被修改后也可以变成新的镜像&#xff0…

Postman中参数填写方式

Postman中参数填写和请求方法有关,一般接口用例请求方法GET与POST常用,所以主要是这两种请求方法请求参数填写 一、GET请求方法参数填写 1、直接在URL中填写请求参数,如直接在URL中填写: http://www.example.com:8089/userapi?unamelisi&…

c++_01_名字空间_复合类型_缺省参数_哑元函数

0 前言 C和C一样,都属于编译型语言 C和C一样,都属于强类型语言 C对C完全兼容,并提供更多面向对象的特性:语言风格更加简洁,类型检查更加严格 1 名字空间 namespace WHY?划分更精细的逻辑单元(逻辑空间)&…

Faulhaber 2.5代运动控制系统 25mNm/13W

2.5代控制系统; PWM输出; 四象限控制带; RS232或CANopen通信接口; 2250_BX4_CxD 选件,电缆和连接信息: 适配部件:

谷歌的开源供应链安全

本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上演讲内容[1]的摘录与整理。 SCORED 是Software Supply Chain Offensive Research and Ecosystem Defenses的简称, SCORED 23[2]于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 💡 谷歌在开源软件供应…

根据数据配置信息运用非集成函数处理数据

根据数据配置信息 (data configure)运用非集成函数nonensembled_map_fns处理蛋白质tensor dict。nonensembled_map_fns处理函数: correct_msa_restypes,add_distillation_flag,cast_64bit_ints,squeeze_fea…

【面经】2024年软件测试面试题大全(持续更新)附答案

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

冒泡排序学习

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻的元素来排序。具体实现如下: 1. 从待排序的数组中的第一个元素开始,依次比较相邻的两个元素。 2. 如果前一个元素大于后一个元素,则交换…

计算机网络英文总结

物理层 数据链路层 循环冗余校验(Cyclic Redundancy Check) 点对点协议PPP(Point-to-Point Protocol) 链路控制协议(Link Control Protocol) 网络控制协议(Network Control Protocol) 网络层(network layer) IP(Internet Protocol) 网际协议 ARP(Address…

Mysql in FIND_IN_SET(‘123‘, 数据库字段) 的使用场景

-- in后面的参数是我传入的List SELECT * from user where 数据库字段 in(123, 456); -- 第一个参数是常量, 第二个参数是 数据库字段(逗号隔开的字符串) SELECT * from user where FIND_IN_SET(123, 数据库字段); 用find_in_set 和 like, SELECT * FROM user WHERE…

YOLOv8使用自定义改进后的模型同时《加载官方预训练权重》教程,附代码

YOLOv8自定义改进后的模型同时《加载官方预训练权重》教程,附代码 💡该教程为改进YOLOv8指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 YOLOv8自定义…

docker部署node服务pm2

mkdir /data cd /data拉取最新keymetrics/pm2:latest-alpine镜像 docker pull keymetrics/pm2  从github上拉取代码,先要安装git git clone https://github.com/keymetrics/pm2-docker-alpinecd /data/pm2-docker-alpine/example-app编写Dockerfile,…

Spring boot basePackages 通配符* 找不到Bean

Spring boot basePackages 通配符* 找不到Bean 今天遇到了一个关于spring boot 组件ComponentScan 中basePackages 使用通配符* 找不到Bean的问题 目录结构中BussinessPerson与Dog类中都有标注有Component注解,结果扫描不到。 然后删除通配符,结果运行成…

01 Vue介绍

概述 Developers in the industry must resolve frontend development problems quickly with minimal impact on existing workflows or backend architecture. In any cases, developers tend to overlook the UI until the end of a project, which can happen because of …

C++相关闲碎记录(15)

1、string字符串 #include <iostream> #include <string> using namespace std;int main (int argc, char** argv) {const string delims(" \t,.;");string line;// for every line read successfullywhile (getline(cin,line)) {string::size_type beg…

ADUM1200ARZ数字隔离器:重新定义技术标准

ADUM1200ARZ数字隔离器成为技术进步领域的关键组件。其创新设计和多方面功能重新定义了数字隔离技术的格局&#xff0c;提供了满足不同工业需求的众多功能。让我们通过本文直观的了解ADUM1200ARZ的功能与技术标准。 窄体且符合ROHS&#xff1a;设定新基准 该数字隔离器采用窄体…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

目录 一、实验 1.蓝绿发布准备 2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布 二、问题 1.手动构建Jenkins前端项目CI流水线报错 2.如何优化手动构建流水线选项参数 一、实验 1.蓝绿发布准备 &#xff08;1&#xff09;环境 表1 蓝绿发布…

该不该实行末位淘汰制?

在绩效考核中&#xff0c;不得不提一种特别的制度&#xff1a;末位淘汰制。具体而言&#xff0c;末位淘汰制是指工作单位根据设定的目标&#xff0c;结合各个岗位的实际情况&#xff0c;设定的考核指标体系&#xff0c;并以此指标体系为标准对员工进行考核&#xff0c;最后根据…