首页 > 其他分享 >请说说你对JS引用赋值,按值赋值的理解

请说说你对JS引用赋值,按值赋值的理解

时间:2024-12-29 09:31:48浏览次数:9  
标签:obj1 按值 对象 JavaScript JS 引用 赋值

在JavaScript中,变量的赋值可以大致分为两类:引用赋值和按值赋值。这种分类主要基于JavaScript的数据类型,特别是原始类型(Primitive Types)和对象类型(Object Types)。

  1. 按值赋值(Value Assignment)

按值赋值通常发生在处理原始类型的数据时,这些原始类型包括:NumberStringBooleanNullUndefinedSymbolBigInt。当你把一个原始类型的值赋给一个变量时,JavaScript实际上是在内存中创建了这个值的一个新副本,并把这个副本的地址赋给了变量。因此,如果你之后改变了这个变量的值,它不会影响到之前赋值的原始数据。

例如:

let a = 5;
let b = a; // b 现在是 5,但它是 a 的一个独立副本
a = 10; // 改变 a 的值不会影响 b
console.log(b); // 输出 5
  1. 引用赋值(Reference Assignment)

与原始类型不同,对象类型(如 ObjectArrayFunction 等)在赋值时采用的是引用赋值的方式。当你把一个对象赋给一个变量时,JavaScript并不是在内存中创建一个新的对象副本,而是创建一个指向该对象内存地址的引用,并把这个引用赋给变量。因此,如果你通过一个变量修改了对象的属性或内容,那么所有引用这个对象的变量都会看到这个变化。

例如:

let obj1 = { value: 1 };
let obj2 = obj1; // obj2 现在引用的是 obj1 所引用的同一个对象
obj1.value = 2; // 通过 obj1 修改对象的属性会影响 obj2
console.log(obj2.value); // 输出 2

总结

  • 按值赋值:适用于原始类型,赋值时创建值的副本。
  • 引用赋值:适用于对象类型,赋值时创建指向对象的引用。

这种赋值行为的不同是JavaScript中一个重要且有时可能导致混淆的概念,特别是在处理对象和原始类型时。了解这一点对于避免常见的编程错误和写出更可预测的代码至关重要。

标签:obj1,按值,对象,JavaScript,JS,引用,赋值
From: https://www.cnblogs.com/ai888/p/18638441

相关文章

  • 使用js写个方法计算5000年内有多少个对称日,如:20211202,反过来也是一样
    要编写一个JavaScript函数来计算5000年内有多少个对称日,你可以按照以下步骤进行:确定起始和结束日期。遍历这个日期范围内的每一天。对于每一天,将其转换为YYYYMMDD格式的字符串。检查该字符串是否是对称的。如果是对称的,则计数器加一。以下是一个实现这个功能的JavaScript......
  • 如何理解在js中访问变量有按值和按引用两种方式?
    在JavaScript中,理解变量的访问方式——按值访问和按引用访问——是理解语言数据结构和行为的关键。这两种方式主要取决于变量的数据类型。按值访问(PassbyValue)在JavaScript中,原始类型(PrimitiveTypes)的数据是按值访问的。原始类型包括:Number、String、Boolean、Null、Un......
  • js Map结构,forEach可以进行遍历,普通for循环为什么不进入执行?
    在JavaScript中,Map是一个键值对集合,它允许你使用任何类型作为键(不仅仅是字符串或符号)。Map对象提供了多种方法来遍历和操作键值对,包括forEach方法。forEach方法是Map对象内置的,它允许你传入一个回调函数来遍历Map中的每个元素。这个方法会自动遍历Map并调用你提供的函......
  • cdn.jsdelivr.net 国内无法访问的替代加速域名网址
    替代域名下面提供一些可替代cdn.jsdelivr.net的地址。jsd.cdn.zzko.cnjsd.onmicrosoft.cntestingcf.jsdelivr.netquantil.jsdelivr.netfastly.jsdelivr.netjsdelivr.b-cdn.netjsdelivr.codeqihan.comjsd.duolaa.topcdn.bili33.topjsd.proxy.aks.moecdn.jsdelivr.......
  • Nodejs_vue大学生实习实训项目基地管理系统
    文章目录项目源码技术介绍具体实现截图开发工具和技术简介课题重点难点:课题重点难点:实施方案:选题特色nodejs类核心代码部分展示系统测试演示视频/源码获取/联系我项目源码技术介绍本系统设计模式是B/S模式,依照MVC进行分层。用户:项目申报,查看公告信息,个人中心,项目申......
  • 【开源免费】基于SpringBoot+Vue.JS学生宿舍信息管理系统(JAVA毕业设计)
    本文项目编号T100,文末自助获取源码\color{red}{T100,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS大学生竞赛管理系统(JAVA毕业设计)
    本文项目编号T101,文末自助获取源码\color{red}{T101,文末自助获取源码}......
  • node.js毕设 宠物爱心组织求助系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于宠物救助方面的研究,现有研究主要以宠物医疗、宠物行为等为主,专门针对宠物爱心组织求助系统的研究较少。在宠物爱心组织救助工作中,存在着信息不畅通......
  • js里面对数组的一些独特/特殊函数
    数组.foreach(函数)这个函数里面默认的参数就是数组里面的每一个元素注意:这里面函数不需要返回参数vararr1=[1,2,3,4,5,6,7]arr1.foreach(function(item){console.log(item)})得到1234567新数组=数组.filter(函数)本质上是foreach的进阶版,在函数中对每一个......
  • ssm实验室排课系统+jsp(10796)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......