当前位置: 首页 > news >正文

JavaScript中引用数据类型的浅拷贝

在JavaScript中,数据类型被分为“基本数据类型”和“引用数据类型”两大类。基本数据类型包括数值型、字符型、逻辑型、未定义型(undefined)、空型(null)和ES6新增的Symbol类型,引用数据类型包括数组、对象和函数。
当我们在程序中执行变量赋值操作的时候,基本数据类型变量的赋值与引用数据类型变量的赋值是不一样的。
【1】基本数据类型变量的赋值。
仔细阅读下列代码:
let a=15;
let b=a;
console.log(a,b);
b=100;
console.log(a,b);
在本段代码中,第一句声明变量a并赋值为15,第二句声明变量b并将变量a的值赋给变量b,即变量b的值来源于变量a。此时输出语句在控制台中会输出两个15。紧接着改变变量b的值为100,继续输出两个变量的结果为:15,100。
【2】引用数据类型变量的赋值。
上述看似合理的赋值操作放在引用数据类型中就会变得不那么简单了,仔细阅读下列代码:
let a=[10,20,30]
let b=a;
console.log(a,b);
b[0]=841;
console.log(a,b);
在本段代码中,第一条输出语句会在控制台中会输出两个[10,20,30]数组。第二条输出语句会在控制台中输出[841,20,30]数组,即对数组元素b[0]的修改也影响了数组a的数组元素a[0]。这和普通数据类型的赋值完全不一样,在JavaScript中被称为引用数据类型的“浅拷贝”。
【3】从变量的本质理解浅拷贝。
浅拷贝只会发生在引用数据类型中,这是因为引用数据类型变量和基本数据类型变量的本质是不同的。我们都知道变量本质上是在内存中开辟的存储空间。JavaScript为基本数据类型变量开辟真实的空间,用来存储赋值的数据;而为引用数据类型变量只开辟用来存储指向数据本身的地址的空间,即引用数据类型变量在内存中存储的是数据的地址,并不是数据本身。所存储的数据的地址也被称为“数据的引用”。
这就是说变量a存储的是数组[10,20,30]的引用(即地址),当把变量a赋值给变量b时,是把a中存储的数组的地址赋给了变量b,即变量b中存储的也是数组的引用,也就是说变量a和b同时指向了一个数组。
这样一来,通过变量b对数组元素的修改也会反应在变量a中,浅拷贝的产生就是这样的原理造成的。
原理是学习一门编程语言最为重要的内容,是彻底理解程序运行机制的唯一途径,在前端开发的学习过程中尤为重要。

http://www.lryc.cn/news/454659.html

相关文章:

  • 自闭症寄宿学校陕西:提供综合发展的教育环境
  • JS模块化工具requirejs详解
  • JavaScript中的异步编程:从回调到Promise
  • windows下DockerDesktop命令行方式指定目录安装
  • 排查和解决JVM OOM实战
  • 【Swift官方文档】7.Swift集合类型
  • QT调用最新的libusb库
  • 白嫖EarMaster Pro 7简体中文破解版下载永久激活
  • 使用JavaScript写一个网页端的四则运算器
  • Linux find命令详解及实用示例
  • CSS基础-常见属性(二)
  • Spring Boot 2.4.3 + Java 8 升级为 Java 21 + Spring Boot 3.2.0
  • 如何利用免费音频剪辑软件制作出精彩音频
  • 安宝特分享 | AR技术重塑工业:数字孪生与沉浸式培训的创新应用
  • 专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
  • 基于springboot vue3 在线考试系统设计与实现 源码数据库 文档
  • 什么是 HTTP 请求中的 options 请求?
  • [图形学]smallpt代码详解(1)
  • Vite多环境配置与打包:
  • git维护【.gitignore文件】
  • 【Canvas与色彩】十六等分多彩隔断圆环
  • 什么是pip? -- Python 包管理工具
  • FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解
  • OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,当初有的问题未解决,目前新版未尝试
  • 前沿论文创新点集合
  • 刷题记录(好题)
  • 【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}
  • python sqlite3 工具函数
  • 顺丰Android面试题集锦及参考答案
  • uniapp中检测应用更新的两种方式-升级中心之uni-upgrade-center-app