理解JavaScript中的对象传递与赋值操作

在JavaScript中,对象传递和赋值操作是两个非常重要的概念。它们在日常开发中扮演着关键角色,但也常常会让人感到困惑。本文将通过两个简单的例子,更好地理解它们的区别和实际应用。

示例代码1:修改对象属性

我们先来看第一段示例代码:

let obj = {name: 'zs'
}function fn(p) {p.name = 'ls';
}fn(obj);
console.log(obj);  // 输出: { name: 'ls' }

解释

在这段代码中,我们创建了一个对象 obj,并定义了一个函数 fn。我们将 obj 传递给 fn,然后在函数内部修改它的 name 属性。最后,我们打印 obj 来查看结果。

  • 对象传递(Pass-by-Reference): 当一个对象被传递给一个函数时,传递的是该对象的引用。这意味着函数内部的参数 p 将引用同一个对象 obj,对 p 的任何修改都会反映在 obj 上。因此,当 p.name = 'ls' 执行时,objname 属性被修改为 'ls'

控制台输出:

{ name: 'ls' }

示例代码2:重新赋值对象

接下来,我们看看第二段示例代码:

let obj = {name: 'zs'
}function fn(p) {p = {name: 'ls'};
}fn(obj);
console.log(obj);  // 输出: { name: 'zs' }

解释

在这段代码中,我们同样创建了一个对象 obj,并定义了一个函数 fn。这次,我们在函数内部将 p 重新赋值为一个新的对象 { name: 'ls' }。最后,我们打印 obj 来查看结果。

  • 赋值操作: 当我们在函数内部执行 p = { name: 'ls' } 时,p 被赋值为一个新的对象引用。这意味着 p 不再引用传入的原始对象 obj,而是引用一个全新的对象 { name: 'ls' }。然而,这个赋值操作只改变了 p 的引用,并没有改变 obj 的引用。因此,obj 仍然指向原始对象 { name: 'zs' }

控制台输出:

{ name: 'zs' }

总结

通过这两个例子,我们了解到:

  1. 对象传递
    • 当对象被传递给函数时,传递的是该对象的引用。对该引用对象的属性修改会影响到原始对象。
  2. 赋值操作
    • 当函数内部对参数重新赋值时,只改变了参数的引用,不会影响到传入的原始对象。

理解这些概念对于编写高效、正确的JavaScript代码至关重要。这篇文章能更好地掌握JavaScript中的对象传递与赋值操作。

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

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

相关文章

【数据结构】顺序表的应用

目录 一.引言 二.顺序表概念 三.顺序表的实现 1.定义顺序表 2.顺序表初始化 ​编辑 3.检查空间,如果满了,进行增容 4.顺序表尾插 5.顺序表尾删 6.顺序表头插 7.顺序表头删 ​编辑 8.顺序表查找 9.顺序表在pos位置插入x 10.顺序表删…

展开说说:Android页面绘制流程源码解析

说到Android系统View的绘制流程,大家一定知道是分为测量(Measure)、布局(Layout)和绘制(Draw)三个阶段,这篇文章主要聊一聊在这三个步骤之前的源码执行流程,页面启动后是…

C语言丢失精度 如何实现高精度计算

(1)int 类型举例 int :占4个字节,也就是32位,及最大值是2^32-11024*1024*1024*4-14294967295 以上说法错误,因为Int是有符号类型整数,所以最高位是符号位,及int的最大值应该是2^31…

【Java】链表的头插法和尾插法

头插法 头插法就是在已有的节点的前面插入新节点 如何实现 (1)先定义一个节点类ListNode,里面有value值和地址 public class ListNode {int value;ListNode next;public ListNode(int value){this.value value;}Overridepublic String t…

开发指南046-机构树控件

为了简化编程&#xff0c;平台封装了很多前端组件。机构树就是常用的组件之一。 基本用法&#xff1a; import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能&#xff1a; 根据权限和控制参数显示机构树。机构树数据来源于核…

让我们一起来看看这些强大的中国汽车品牌如何勇攀巅峰!

咱们中国的汽车品牌&#xff0c;就是这么牛&#xff01;你知道吗&#xff1f;他们已经悄悄崛起&#xff0c;一步步向着更广阔的海外市场进军了。尽管这个过程可能有点坎坷&#xff0c;但是“勇敢”始终是他们前行的动力&#xff0c;推动着他们不断向前&#xff0c;打造属于我们…

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 目录 AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 一、简单介绍 二、文本摘要 三、在CNN/Daily…

秋招突击——7/9——MySQL索引的使用

文章目录 引言正文B站网课索引基础创建索引如何在一个表中查看索引为字符串建立索引全文索引复合索引复合索引中的排序问题索引失效的情况使用索引进行排序覆盖索引维护索引 数据库基础——文档资料学习整理创建索引删除索引创建唯一索引索引提示复合索引聚集索引索引基数字符串…

C#基于任务的异步模式(TAP)

1、C#异步模式分类 基于任务的异步模式&#xff08;TAP&#xff09; 基于事件的异步模式&#xff08;EAP&#xff09;和异步编程模型模式&#xff08;APM&#xff09; 2、基于任务的异步模式&#xff08;TAP&#xff09; 基于任务的异步模式&#xff08;TAP&#xff09;用单个方…

从零手写实现 nginx-28-error pages 指令

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

夹子音转换器matlab

操作过程点击此处观看 上段时间补习了一下傅里叶变化的知识&#xff0c;突发奇想可以根据此做一款声音转换器&#xff0c;使用工科神器Matlab进行完成&#xff0c;并且开发了可操作界面如下图所示&#xff1a; 功能实现与描述 软件中可以实现声音的录制、回放、文件的保存与…

【C++】动态内存分配(关于构造与析构函数的调用)动态数组类 动态创建多维数组 知识点+代码学习记录

一.动态内存分配相关知识点 1.堆和栈内存&#xff1a; 堆内存&#xff1a;动态分配的内存位于堆中&#xff0c;它不受作用域限制&#xff0c;由程序员控制其生命周期。 栈内存&#xff1a;局部变量和函数参数等自动分配的内存位于栈中&#xff0c;由编译器自动管理。 2.new…

性能测试(2)

jmeter参数化 loadrunner Jmeter IP欺骗&#xff0c;也称为IP欺诈&#xff0c;是指通过伪装、篡改IP地址的方式&#xff0c;进行网络攻击或欺骗行为。这种行为可能会导致网络安全问题&#xff0c;包括身份盗窃、数据泄露、DDoS攻击等。为了保护自己的网络安全&#xff0c;用户…

MySQL-表的约束

文章目录 一、空属性二、默认值三、zerofill四、列描述五、主键删除主键追加主键复合主键根据主键快速索引 六、自增长last_insert_id() 七、唯一键八、外键class表&#xff08;主表&#xff09;student表&#xff08;从表&#xff09; 一、空属性 之前我们将表的机构&#xff…

单例模式java

并发的有序性会导致返回空指针 class A{private static volatil A a;private A(){}public A getInstance(){if(anull){synchronized(A.class){if(anull)anew A();}}return a; }anew A();这条语句&#xff0c;他需要&#xff1a;开辟空间&#xff0c;初始化空间&#xff0c;指针…

python热门面试题三

面试题1&#xff1a;Python中的列表推导式是什么&#xff1f;请给出一个例子。 回答&#xff1a; 列表推导式&#xff08;List Comprehension&#xff09;是Python中一种非常强大且简洁的构建列表的工具。它允许你通过一个表达式来创建一个新的列表&#xff0c;这个表达式定义…

无显卡也可以玩大模型-MiniGPT-4篇

MiniGPT-4学习 1.Colab上部署MiniGPT-42.论文摘要3.模型架构4.模型训练5.总结 1.Colab上部署MiniGPT-4 代码&#xff1a; https://github.com/Czi24/Awesome-MLLM-LLM-Colab/blob/master/MLLM/MiniGPT-4-colab/MiniGPT-4.md 2.论文摘要 最近的 GPT-4 展示了非凡的多模式能力&…

【设计模式之美】【建造型】工厂模式:通过面向接口编程思路,串起业务流程

文章目录 一. 简单工厂&#xff08;Simple Factory&#xff09;第一种简单工厂&#xff1a;面向接口编程与工厂类&#xff1a;划分功能职责第二种&#xff1a;单例简单工厂&#xff1a;节省内存和对象创建的时间 二. 工厂方法&#xff08;Factory Method&#xff09;&#xff1…

文心一言:如何备考软考架构师

提问&#xff1a;软考高级:架构师指导&#xff0c;有哪些考点、重点考点有哪些&#xff1f;需要如何备考&#xff1f;案例分析题如何做&#xff1f;论文如何写&#xff1f; 文心一言回答1700字如下&#xff1a; 针对软考高级架构师的考试&#xff0c;以下是对考点、重点考点、备…

DiffusionModel-Transformer知识回顾

论文链接&#xff1a; Attention Is All You Need CNN vs RNN vs Transformer CNN&#xff08;卷积神经网络&#xff09; 特点&#xff1a; 局部连接&#xff1a;每个卷积神经元只与输入数据的局部区域连接&#xff0c;这有助于捕捉局部特征。权重共享&#xff1a;卷积核的权重…