JS基础之 数据浅拷贝与深拷贝
一、拷贝背景
JS引用数据类型有两类:基本数据类型和引用数据类型;
基本类型:String,Number,Boolean,Null,Undefined,symbol
这6种基本数据类型它们是直接按值存放的,所以可以直接访问。
引用类型:Function,Array,Object
,当我们需要访问这三种引用类型的值时,首先得从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。
// 代码示例:
let obj2 = Obj1; // 此处引用类型直接赋值,obj2的指向堆的地址未改变
obj2.name = "爸爸" // 看似修改的obj2,其实修改的是obj1的属性值
// obj2、obj1的 name值都被修改了。
console.log(obj1.name); // "爸爸"
console.log(obj2.name); // "爸爸"
为了解决这个问题,所以需要拷贝数据!!!!
二、浅拷贝*3
1、for in 循环拷贝
let newObj = {};
for(let key in oldObj){newObj[key] = oldObj[key];
}
console.log("拷贝对象",newObj);
2、Object.assign();对象合并拷贝
let newObj = Object.assign({},oldObj);
3、解构拷贝(…)
let newObj = { ...oldObj }
三、深拷贝*2
1、JSON拷贝
JSON.parse(JSON.stringify(Obj));
2、递归拷贝
function deepClone(Obj){let newObj = {};for(let key in Obj){newObj[key] = Obj[key];if(newObj[key] instanceof Object){deepClone(newObj[key]);}}return newObj;
}
四、浅、深拷贝区别
浅拷贝只拷贝到数据的第一层,深拷贝拷贝的数整个数据。
扩展:for in 与 for of循环
for key in 主要用于循环对象,不能循环数组
for value of 主要用于循环数组
const person = {name: 'Alice',age: 30
};
for (let key in person) {console.log(key); // 输出: name, ageconsole.log(person[key]); // 输出: Alice, 30
}
const arr = [1, 2, 3];
for (let value of arr) {console.log(value); // 输出: 1, 2, 3
}
相关文章:
JS基础之 数据浅拷贝与深拷贝
一、拷贝背景 JS引用数据类型有两类:基本数据类型和引用数据类型; 基本类型:String,Number,Boolean,Null,Undefined,symbol这6种基本数据类型它们是直接按值存放的,所以…...
FFmpeg开发笔记(十四)音频重采样的缓存
FFmpeg在很多地方都运用了缓存机制,比如《FFmpeg开发实战:从零基础到短视频上线》一书的“3.3.2 对视频流重新编码”介绍了编解码的数据缓存,不单是视频编码过程和视频解码过程有缓存,甚至连音频重采样都用到了缓存。 也就是说&a…...

详解Python面向对象编程(一)
类和对象 面向过程——怎么做? (1)把完成某一需求的所有步骤、从头到尾,逐步实现 (2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数 (3)最后完成的代码&a…...

一文带你完整了解Go语言IO基础库
作者 | 百度小程序团队 导读 introduction 对于刚接触Golang学习的同学,估计比较难掌握的知识点之一就是文件IO处理,光在基础库里会发现 golang除了io包提供文件处理外,os包,http包,embed包都有提供类似的处理…...

Java基于微信小程序的校园请假系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#…...

Expert Prompting-引导LLM成为杰出专家
ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示,对齐的大型语言模型(LLM)的回答质量可以显著提高。在本文中,我们提出了ExpertPrompting,以激发LLM作为杰出专家回…...

Element-Plus下拉菜单边框去除教程
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...

免费redis可视化工具windows/mac都可以使用,开源免费
官方地址:RedisInsight | The Best Redis GUI github开源地址:GitHub - RedisInsight/RedisDesktopManager Redis Desktop Manager – Redis可视化管理工具、redis图形化管理工具、redis可视化客户端、redis集群管理工具。 官方下载方式 滚动到页面底…...

PHPCMS v9城市分站插件
PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无…...

学习几个地图组件(基于react)
去年开发时用的公司封装的地图组件,挺方便的,但是拓展性不强,所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍:开源的JavaScript库,用于在web上制作交互式地图,允许你使用React组件的方式在应…...

【测试开发学习历程】计算机编程语言
前言: 学习完数据库,我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类, 在这之后,我们会以Python为重点, 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…...

动态内存管理-传值调用错题解析
首先我们来看这个错误代码 首先我们看代码逻辑,首先main函数调用test,test接收的是void类型,设置一个指针变量,指向null,传递给get函数,也就是传递一个空指针给getmemory函数,这个函数接收了&a…...

Java特性之设计模式【装饰器模式】
一、装饰器模式 概述 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中,以…...

Leetcode算法题笔记(2)
目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …...

二手车交易网站|基于JSP技术+ Mysql+Java+ B/S结构的二手车交易网站设计与实现(可运行源码+数据库+设计文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…...

lora-scripts 训练IP形象
CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区,能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型(使用lora-scripts)-CSDN博客文章浏览阅读1.1k次…...
Acwing 503. 借教室
Problem: 503. 借教室 文章目录 思路解题方法复杂度Code 思路 这是一个二分查找问题。我们需要找到最大的借教室数量,使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。 解题方法 我们首先对所有的借教室请求按照结束时间…...

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…...

Linux设备驱动开发 - 三色LED呼吸灯分析
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 展锐UIS7885呼吸灯介绍呼吸灯调试方法亮蓝灯亮红灯亮绿灯展锐UIS7885呼吸灯DTS配置ump9620 PMIC驱动ump9620中的LED呼吸灯驱动LED的tr…...

开发者的瑞士军刀:DevToys
DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…...

【vue3.0】实现导出的PDF文件内容是红头文件格式
效果图: 编写文件里面的主要内容 <main><div id"report-box"><p>线索描述</p><p class"label"><span>线索发现时间:</span> <span>{{ detailInfoVal?.problem.createdDate }}</span></p><…...
【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)
CSP-202012-2-期末预测之最佳阈值 关键点 1.map的遍历方式 map<int, int>occ0Num, occ1Num; for (auto it thetaSet.begin(); it ! thetaSet.end(); it) {num num occ0Num[*it] - occ1Num[*it];auto nextIt next(it); // 获取下一个迭代器if (num > maxNum &a…...

docker学习笔记 三-----docker安装部署
我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…...

FastAPI+React全栈开发02 什么是FARM技术栈
Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…...
C#程序结构详解
目录 背景: 一、C#程序的基本组成部分 二、C# Hello World示例 三、程序结构解析 四、编译与执行C#程序 五、总结 背景: 在学习C#编程语言的过程中,了解程序的基本结构是非常重要的。C#程序由多个组成部分构成,每个部分都有其特定的功能和作用。下面…...
linux 清理空间
1. 根目录下执行命令,查看每个目录下文件大小总和 rootvm10-88-88-3 /]# du -h --max-depth1 79M ./tmp 123M ./etc 4.0K ./media 4.0K ./srv 104M ./boot 5.3G ./var 0 ./sys 8.6M ./dev 196G ./usr 4.0K ./mnt 285M ./opt…...

C语言:给结构体取别名的4种方法
0 前言 在进行嵌入式开发的过程中,我们经常会见到typedef这个关键字,这个关键字的作用是给现有的类型取别名,在实际使用过程中往往是将一个复杂的类型名取一个简单的名字,便于我们的使用。就像我们给很熟的人取外号一样ÿ…...

今天聊聊Docker
在数字化时代,软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术,正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景,帮…...

【C语言】结构体
个人主页点这里~ 结构体 一、结构体类型的声明1、结构的声明2、结构体变量的创建和初始化3、声明时的特殊情况4、自引用 二、结构体内存对齐1、对齐规则2、存在内存对齐的原因3、修改默认对齐数 三、结构体传参四、结构体实现位段 一、结构体类型的声明 我们在指针终篇中提到过…...

Git基础(24):分支回退
文章目录 前言放弃已修改的内容分支回退到指定commit 前言 将分支回退到之前的某个版本 开发中,可能开发某个功能不需要了,或者想要回退到之前历史的某个commit, 放弃后来修改的内容。 放弃已修改的内容 如果未提交,直接使用 …...