js【详解】深拷贝

  什么是深拷贝?

对于引用类型的数据,才有深浅拷贝的说法

  • 浅拷贝 :执行拷贝的变量只复制被拷贝变量内存的引用数据的地址。
被拷贝变量内地址指向的数据发生变化时,执行拷贝的变量也会同步改变
  • 深拷贝
  1. 在堆内存中开辟一个全新的存储空间
  2. 将被拷贝变量中引用地址对应的内容完整复制一份存入新的存储空间
  3. 将新的存储空间的地址存入执行拷贝的变量中。
被拷贝变量内地址指向的数据发生变化时,执行拷贝的变量不会改变

深拷贝方案一 JSON.parse(JSON.stringify(obj))

缺陷:

  • 属性值为函数和undefined的属性会丢失
  • 属性值为正则表达式的会变成{}
  • 属性值为时间对象的会变成时间字符串
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script>let obj = {string: "字符串",Number: 10,null: null,undefined: undefined,date: new Date(),function: () => {console.log("函数");},RegExp: /^([0]{2}|0[1-9]|[1-9])\d*$/,}console.log("被拷贝的对象");console.log(obj);let objJSONclone = JSON.parse(JSON.stringify(obj));console.log("使用JSON.parse(JSON.stringify(obj))拷贝对象");console.log(objJSONclone);</script></body>
</html>

 深拷贝方案二

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script>/*** 深拷贝* @param {Object} obj 要拷贝的对象*/let obj = {string: "字符串",Number: 10,null: null,undefined: undefined,date: new Date(),function: () => {console.log("函数");},RegExp: /^([0]{2}|0[1-9]|[1-9])\d*$/,}function deepClone(obj) {if (obj === null) return null;if (typeof obj !== "object") return obj;if (obj.constructor === Date) return new Date(obj);if (obj.constructor === RegExp) return new RegExp(obj);var newObj = new obj.constructor(); //保持继承链for (var key in obj) {//不遍历其原型链上的属性if (obj.hasOwnProperty(key)) {var val = obj[key];// 使用arguments.callee解除与函数名的耦合newObj[key] = typeof val === "object" ? arguments.callee(val) : val; }}return newObj;}let test = deepClone(obj)console.log(test)</script></body>
</html>

 

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

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

相关文章

如何在edge上安装拓展weTab

1.点解管理拓展 2.点击获取拓展 3.搜索框输入"wetab"并搜索 4.点击获取按钮 5.点击之后跳出弹窗,点击"添加拓展" 6.回到拓展页面,找到wetab拓展,点击右侧启动拓展 7.打开新的界面,wetab已经启动 8.自定义界面 1. 右键图标可以进行删除操作 2.左下角有个设…

Kubernetes集群搭建 kubernetes集群安装

Kubeadm kubeadm 是 Kubernetes 社区提供的集群构建工具&#xff0c;它能够以最佳实践的方式部署一个最小化的可用 Kubernetes 集群。 但是 kubeadm 在设计上并未安装网络解决方案&#xff0c;所以需要用户自行安装第三方符合 CNI 的网络解决方案&#xff0c;如 flanal&#…

【Python + Django】启动简单的文本页面

前言&#xff1a; 为了应付&#xff08;bushi&#xff09;毕业论文&#xff0c;总要自己亲手搞一个像模像样的项目出来吧 ~ ~ 希望自己能在新的连载中学到项目搭建的知识&#xff0c;这也算是为自己的测试经历增添光彩吧&#xff01;&#xff01;&#xff01; 希望、希望大家…

你的电脑打不开摄像头问题

我一直以为我电脑上的摄像头老是打不开是因为硬件不匹配的问题。知道我发现了我的拯救者Y7000的机身盘边的“摄像头开关”按钮。。。 我去&#xff0c;你的摄像头开关按钮怎么设置在机身旁边啊。。。。 —————————————————————— 2024年3月21日更新记录&a…

UE5.3 StateTree使用实践

近期浏览UE的CitySample&#xff08;黑客帝国Demo&#xff09;&#xff0c;发现有不少逻辑用到了StateTree学习一下&#xff0c;StateTree是多层状态机实现&#xff0c;以组件的形式直接挂载在蓝图中运行。 与平时常见的一些FSM库不同&#xff0c;StateTree并不会返回给外界当…

【Git】第二课:git安装和配置

安装 我们伟大祖国有句古话叫巧妇难为无米之炊&#xff0c;还有句话叫工欲善其事必先利其器。所以&#xff0c;在正式的学习之前&#xff0c;我们需要先把git这把利器安装好。 Windows系统 下载安装包 打开Git - Downloading Package页面&#xff0c;根据系统类型32位还是6…

基于C/C++的easyx图形库教程

文章目录: 一&#xff1a;前言 二&#xff1a;窗口&#xff08;宽高 背景颜色 窗口标题 弹出对话框&#xff09; 三&#xff1a;图形绘制&#xff08;点 线 矩形 圆 椭圆&#xff09; 四&#xff1a;文字&#xff08;颜色 大小 背景 位置 打印 文字居中&#xff09; 五&a…

vue3 reactive丢失响应式

问题 使用 reactive 构造响应式对象时&#xff0c;当对其进行重新赋值后&#xff0c;会导致原有变量失去响应式&#xff0c;页面不会发生联动更新 例如&#xff1a; 1、使用 reactive 定义一个响应式的对象变量 let data1 reactive({name: 小李,date: 2024-03-18,address: xx…

解读“CFMS中国闪存市场峰会”存储技术看点-1

昨天CFMS中国闪存市场峰会在深圳举行&#xff0c;小编本来计划前往现场参加&#xff0c;但由于有事冲突未能如期前往&#xff0c;非常遗憾&#xff01; 本次峰会的主题是“存储周期激发潜能”。在闪存市场的供需关系逐渐恢复正常的阶段&#xff0c;闪存市场如何发展变化&#x…

Vue字符串里的中文数字转换为阿拉伯数字

js字符串里的汉字数字转化为数字 <template><view><view><view class"inpbox" ><textarea v-model"voiceMane" input"convert" ></textarea></view></view></view> </template> &…

【视频异常检测】Delving into CLIP latent space for Video Anomaly Recognition 论文阅读

Delving into CLIP latent space for Video Anomaly Recognition 论文阅读 ABSTRACT1. Introduction2. Related Works3. Proposed approach3.1. Selector model3.2. Temporal Model3.3. Predictions Aggregation3.4. Training 4. Experiments4.1. Experiment Setup4.2. Evaluat…

自然语言处理实战项目28-RoBERTa模型在BERT的基础上的改进与架构说明,RoBERTa模型的搭建

大家好,我是微学AI,今天给大家介绍下自然语言处理实战项目28-RoBERTa模型在BERT的基础上的改进与架构说明,RoBERTa模型的搭建。在BERT的基础上,RoBERTa进行了深度优化和改进,使其在多项NLP任务中取得了卓越的成绩。接下来,我们将详细了解RoBERTa的原理、架构以及它在BERT…

ensp不同vlan间的互相通信

关于不同vlan之间的通信&#xff0c;本章做了最简洁的案例&#xff0c;表示说明 1. 网段设置 1.1 划分四个不同 的 vlan vlan网段vlan10192.168.10.254 /24vlan20192.168.20.254 /24vlan30192.168.30.254 /24vlan40192.168.40.254 /24 1.2 SW1的配置 #进入视图 sys #更改交…

QT的学习

代码练习 做一个UI登录页面 源文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("洛克启动&#xff01;");this->…

iOS报错-Command PhaseScriptExecution failed with a nonzero exit code

问题&#xff1a;iOS debug没问题&#xff0c;一打包就报错&#xff1a; Command PhaseScriptExecution failed with a nonzero exit code 解决方法如下&#xff1a; 在项目的Pods目录下&#xff0c;找到Targets Support Files->Pods-xxxx-frameworks.sh 如下&#xff1a…

全域电商数据实现高效稳定大批量采集♀

全域电商&#xff0c;是近几年的新趋势&#xff0c;几乎所有商家都在布局全域&#xff0c;追求全域增长。但商家发现&#xff0c;随着投入成本的上涨&#xff0c;利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新&#xff0c;通过堆人头的方式完成每日取数任…

hcip复习总结1

OSI----------- 定义了数据的产生标准 。 7 层 应用 ------- 表示 会话 传输 -----Telnet - 23 ssh---22 http---80 https-443 TCP ---- 传输控制卋议。是一种面向连接的可靠的传输卋议。 UDP---- 用户数据报卋议。是一种非面向连接的丌可靠传输卋议。 保证可靠性&…

Windows系统搭建web网站并结合内网穿透实现公网访问本地站点

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

分享一个ChatGPT 3.5和4.0(国内可用)【2024年3月】

一、ChatGPT的应用&#xff1a; 随着更多人接触并使用GPT&#xff0c;大众普遍赞同了一点&#xff1a;ChatGPT实在是用户体验超棒&#xff01; 现在大家认为最出色的版本无疑是3.5和4.0。通过使用他们&#xff0c;会清楚的发现&#xff1a; GPT-4.0在综合技能上的表现无疑更…

如何在CentOS7搭建DashDot服务器仪表盘并实现远程监控

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务…