基本类型值,是按值复制的,而不是按引用复制的。(深浅拷贝)

let obj=[1,2,4]
let obj2=Array.from(obj)
obj2[0]=23
console.log(obj)

这是浅拷贝吗?

在给出的例子中,Array.from(obj) 实际上执行的是对数组 obj 的浅拷贝。这是因为数组在JavaScript中是一种特殊的对象,其元素存储在索引属性中。Array.from() 方法创建了一个新的数组实例,并将原数组 obj 的每个元素复制到新数组中。但是,由于数组元素本身(在这个例子中是数字)是基本类型值,它们是按值复制的,而不是按引用复制的。

因此,当您修改 obj2[0] 的值为 23 时,原数组 obj 并未受到影响,因为您没有修改任何对象的引用,只是修改了新数组 obj2 的第一个元素的值。

但是,如果数组 obj 包含的是对象引用(而不是基本类型值),那么 Array.from() 仍然会执行浅拷贝,这意味着新数组 obj2 中的对象引用将指向与原数组 obj 中相同的对象。对这些对象的修改将会影响两个数组。

在您的例子中,由于数组 obj 只包含基本类型值(数字),因此可以说 Array.from(obj) 创建了一个与 obj 完全独立的数组 obj2,对 obj2 的修改不会影响到 obj。但这并不改变 Array.from() 执行的是浅拷贝的事实,只是在这个特定的例子中,浅拷贝和深拷贝在行为上没有区别。


基本类型值,是按值复制的,而不是按引用复制的

在JavaScript中,基本类型值(如数字、字符串、布尔值、nullundefinedSymbol 以及ES10引入的BigInt)是按值复制的。这意味着当你将一个基本类型的值赋给一个新的变量时,你实际上是在内存中创建了这个值的一个全新副本,并将新变量的引用指向这个新副本。

对于对象(包括数组、函数、对象字面量等),它们是按引用复制的。但是,当使用 Array.from() 或其他类似的方法(如展开运算符 ... 或 slice())来“复制”数组时,虽然数组本身是按引用复制的(即新数组是一个新的数组对象),但数组中的元素(如果它们是对象)则取决于这些元素是基本类型还是对象类型。

  • 如果数组中的元素是基本类型,那么这些元素是按值复制的。
  • 如果数组中的元素是对象类型(包括其他数组、函数、对象字面量等),那么这些元素实际上是按引用复制的,即新数组中的这些元素引用的是和原数组中相同的对象。

由于数组 obj 只包含基本类型值(数字),因此使用 Array.from(obj) 创建的新数组 obj2 中的元素与原数组 obj 中的元素是完全独立的。对 obj2 中元素的任何修改都不会影响 obj 中的元素。

let obj=[1,2,4,{name:'张三',age:18}]
let obj2=Array.from(obj)
obj2[3].name='引用数据类型,按引用复制'
console.log(obj)
//输出[ 1, 2, 4, { name: '引用数据类型,按引用复制', age: 18 } ]

修改了复制的会影响原来的

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

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

相关文章

Spring Cloud、Spring Cloud LoadBalancer、Nacos 和 OpenFeign整合

版本 Spring Cloud 3.1.1spring cloud loadbalancer 3.1.1nacos 2021.1open feign 3.1.1 引入依赖 在项目的 pom.xml 文件中添加相关依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

【创作活动】面对层出不穷的AI大模型产品我们应该怎么选择?

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Vue CLI 4与项目构建实战指南

title: Vue CLI 4与项目构建实战指南 date: 2024/6/9 updated: 2024/6/9 excerpt: 这篇文章介绍了如何使用Vue CLI优化项目构建配置&#xff0c;提高开发效率&#xff0c;涉及配置管理、项目部署策略、插件系统定制以及Webpack和TypeScript的深度集成技巧。 categories: 前端…

五、身份与访问管理—身份管理和访问控制管理(CISSP)

目录 1.身份管理 1.1 目录技术 1.2 单点登录 1.2.1 Kerberos认证 1.2.2 SESAME认证 1.2.3 KryptoKnight认证 1.3 联合身份管理 1.3.1 SAML安全断言标记语言 1.3.2 标记语言 1.3.3 OpenID 1.3.4 OAuth 1.3.5 OIDC(OpenID Connect) 2.身份即服务(IDaaS) 2.1 AA…

深度神经网络是什么?

深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是机器学习领域中的一种重要技术&#xff0c;特别是在深度学习领域。以下是关于深度神经网络的详细回答&#xff1a; 1. 定义与结构 定义&#xff1a;深度神经网络是由多层人工神经元相互连接而成的网络结构&am…

Rocky linux 搭建DNS主从服务器+keepalived实现高可用

接上两篇文章&#xff0c;这篇文章跟上两篇没有直接关系。 第一篇&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域_linux 域控-CSDN博客文章浏览阅读519次&#xff0c;点赞20次&#xff0c;收藏10次。使用linux rocky 搭建DNS服务&#xff…

【个人博客搭建】(22)申请QQ开发者

这里我们要引入的一个概念是OAuth - OAuth 2.0是一个行业标准的授权协议&#xff0c;用于处理用户数据访问和分享的安全问题。它允许用户将他们对某些服务的访问权限授权给第三方应用&#xff0c;而无需分享他们的用户名和密码。以下是对OAuth 2.0的介绍&#xff1a; 基本概念 …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:中国舰船研究院

中国舰船研究院又称中国船舶重工集团公司第七研究院&#xff0c;隶属于中国船舶重工集团公司&#xff0c;是专门从事舰船研究、设计、开发的科学技术研究机构&#xff0c;是中国船舶重工集团公司的军品技术研究中心、科技开发中心&#xff1b;主要从事舰船武器装备发展战略研究…

PDF编辑与转换的终极工具智能PDF处理Acrobat Pro DC

Acrobat Pro DC 2023是一款功能全面的PDF编辑管理软件&#xff0c;支持创建、编辑、转换、签署和共享PDF文件。它具备OCR技术&#xff0c;可将扫描文档转换为可编辑文本&#xff0c;同时提供智能PDF处理技术&#xff0c;确保文件完整性和可读性。此外&#xff0c;软件还支持电子…

信驰达蓝牙数字钥匙方案持续创新,助推智慧汽车生态发展

随着汽车智能化的加速发展&#xff0c;数字钥匙正成为全球化的新趋势&#xff0c;它通过数字化的手段连接人、车以及更广泛的生态&#xff0c;引领着出行方式的革命和用户体验的转变。数字钥匙不仅仅是一个简单的访问工具&#xff0c;它重新定义了人与车的互动方式&#xff0c;…

竞拍商城系统源码后端PHP+前端UNIAPP

下载地址&#xff1a;竞拍商城系统源码后端PHP前端UNIAPP

手把手教你入门vue+springboot开发(二)

文章目录 前言一、开发环境搭建二、创建项目三、编写代码1.插件下载2.编写代码 四、测试验证总结 前言 前面我们构建了一个查询用户信息的简单springboot后端demo&#xff0c;今天我们先搭建VSCodevue的开发环境&#xff0c;然后在这个开发环境上构建一个demo&#xff0c;连接…

肠道病原体感染定植的三个关键角色——炎症、营养与共生菌群

谷禾健康 日常生活中大部分人都可能碰到过食用了不卫生或过期变质食物以及水源后&#xff0c;出现过恶心、腹痛&#xff0c;并伴有腹泻、食欲不振、呕吐等症状&#xff1f;如果有就要当心&#xff0c;这可能是病原体感染引起的胃肠道炎症。 但是&#xff0c;即使食用了同样食物…

mysql中 redo日志(下)

大家好。上篇文章我们介绍了什么是redo日志以及redo日志的写入过程。建议没看过上篇文章的同学先看一下上一篇文章&#xff0c;今天我们继续来说一说redo日志。 一、redo日志文件 1. redo日志刷盘时机 我们知道mtr运行过程中产生的一组redo日志在mtr结束时会被复制到log buf…

从VS Code源码看清晰代码之美

VS Code的产品做的很优秀&#xff0c;其源码也质量颇高&#xff0c;清晰、整洁、富有美感。 下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码&#xff0c;大家感受一下&#xff1a; get sticky(): boolean {if (this._sticky) {return true; // explicitl…

Python基础总结之列表转字符串

Python基础总结之列表转字符串 在Python中&#xff0c;将列表转换为字符串有多种方法&#xff0c;最常用的是使用str.join()方法。这里有一些示例&#xff1a; 使用str.join()方法 这是将列表转换为字符串的最直接和最常用的方法。你需要确保列表中的所有元素都是字符串类型…

本地文件传远程开发

1. 本地文件传远程开发 安装sftp插件 创建sftp配置文件 创建.vscode目录&#xff0c;在目录下创建sftp.json文件&#xff0c;内容如下&#xff1a; {"name": "ip", "host": "ip", "protocol": "sftp","po…

麒麟系统 3588 环境安装手册

目录 一、银河麒麟下安装OPenCV基础库 3、安装yasm-1.2.0 4、安装x264 5、安装fdk-aac-0.1.6 6、安装Speex 7、安装pkg-config 8、安装zlib1g 9、安装libgtk2.0 10、安装ffmpeg ffmpeg环境配置 二、银河麒麟下移植OpenCV 编译opencv qwer1234 麒麟 默认root 密码 …

vue 笔记04

目录 01 自定义指令的使用 02 watch 监听的使用 03 Vue动画之使用动画库 01 自定义指令的使用 系统自带的指令功能不足的时候可以创建自定义指令 和data同级的位置定义: directives:{ 不带v-的指令名称(当前指令所在的标签dom对象,指令对象){ } } 通过指令对象.value能够获…