JavaScript青少年简明教程:赋值语句

news2024/11/23 13:36:48

JavaScript青少年简明教程:赋值语句

赋值语句(assignment statement)

JavaScript的赋值语句用于给变量、对象属性或数组元素赋值。赋值语句的基本语法是使用符号 (=) 将右侧的值(称为“源操作数”)赋给左侧的变量、属性或元素(称为“目标操作数”)。

变量赋值方面,原始(基本)数据类型的变量赋值是值的复制,而引用数据类型(对象类型)的变量赋值是引用的复制。

JavaScript的变量赋值,对于基本数据类型(如数字、字符串、布尔值等),赋操作会将值复制给变量。而对于引用数据类型(如对象、数组等),赋值操作会将引用(指向对象的内存地址)复制给变量,而不是复制对象本身。这意味着,当你修改一个引用类型的变量时,实际上是修改了引用所指向的对象。

☆对于原始类型,变量赋值是通过将一个值复制给另一个变量来完成的。这意味着当你将一个原始数据类型的变量赋值给另一个变量时,实际上是将原始值复制到了新的变量中。这两个变量是完全独立的,修改其中一个变量的值不会影响另一个变量。

例如:

let a = 5.1;

let b = a;

b = 10.2;

console.log(a); // 输出 5.1

console.log(b); // 输出 10.2

当把一个原始变量的值赋给另一个原始变量时,只是把栈中的内容复制给另一个原始变量,此时这两个变量互不影响——其实在内存中是两个地址,是互相独立的存在,当一个变量值改变时,另一个变量不会因此而发生任何变化。图解如下:

【图中的红色❌,表示5.1这个值不再被变量a引用,若一个值不再被任何变量引用,可以被垃圾回收器标记为可回收的,具体的垃圾回收时间是由JavaScript引擎决定的。】

☆对于引用数据类型,变量赋值是通过将引用复制给另一个变量来完成的。引用是指向存储在内存中的对象的地址。当你将一个引用数据类型的变量赋值给另一个变量时,实际上是将引用复制到了新的变量中,这两个变量指向同一个对象,修改其中一个变量的属性会影响另一个变量。

例如:

let obj1 = { name: 'Alice' };

let obj2 = obj1;

obj2.name = 'Bob';

console.log(obj1.name); // 输出 'Bob'

console.log(obj2.name); // 输出 'Bob'

需要注意的是,当你修改引用数据类型的属性时,实际上是修改了对象本身,而不是变量。因此,所有指向该对象的变量都会反映出这个修改。图解如下:

说明:

基本赋值:通过等号(=)将一个值赋给一个变量。例如:

let x = 5;

这个赋值语句将整数值5赋给变量x。

初学者需要注意,符号=在编程中作为赋值操作符的意义和数学中作为等号的意义不同。编程中的赋值表示将右侧的值或表达式的结果赋给左侧的变量。

多重赋值:JavaScript还支持多个变量同时赋值的方式。例如:

let a = 1, b = 2, c = 3;

这个赋值语句将分别把1、2和3赋给变量a、b和c。

复合赋值操作符:JavaScript中还支持复合赋值操作符,用于将运算结果赋给变量。例如:

let x = 10;

x += 5; // 等同于 x = x + 5;

这个赋值语句将变量x的值加上5,并将结果赋给x。

JavaScript支持多种复合赋值运算符:

x += 5;  // 等同于 x = x + 5

x -= 3;  // 等同于 x = x - 3

x *= 2;  // 等同于 x = x * 2

x /= 4;  // 等同于 x = x / 4

x %= 3;  // 等同于 x = x % 3

x **= 2; // 等同于 x = x ** 2 (ES7,ECMAScript 2016)。

链式赋值:JavaScript中的赋值语句支持链式赋值。例如:

let a, b, c;

a = b = c = 10;

这个赋值语句将把值10同时赋给变量a、b和c。

需要注意的是,JavaScript是一种动态类型语言,变量的类型可以在运行时改变。因此,赋值语句可以用于改变变量的类型,例如:

let x = 5;

x = "Hello";

这个赋值语句将整数值5赋给变量x,然后将字符串"Hello"赋给同一个变量x。

JavaScript在赋值过程中可能进行隐式类型转换:

let x = "5";

let y = +x;  // y 是数字 5

特别提示,学习者需要明确,JavaScript的赋值操作分为 值赋值(Value Assignment)和引用赋值(Reference Assignment)两种情况。

值赋值:当将一个简单数据类型——原始数据类型(Primitive Types)包括Number、String、Boolean、null、undefined和Symbol(在ES6中引入)——赋给一个变量时,实际上是将该值复制到变量中,而不是将变量指向原始值的内存地址。这意味着变量和原始值是完全独立的,对变量的修改不会影响原始值。例如:

let x = 5;

let y = x;

x = 10;

console.log(x); // 输出 10

console.log(y); // 输出 5

在这个例子中,将变量x赋值给变量y时,实际上是将数字5复制给y。后续对变量x的修改不会影响变量y。

引用赋值:当将一个复杂数据类型——引用类型(Reference Types),包括Object、Array、Function等——赋给一个变量时,实际上是将该值的引用复制给变量,而不是将整个值复制到变量中。这意味着变量和原始值引用的是同一个内存地址,对变量的修改也会影响原始值。例如:

let obj1 = { name: "Alice" };

let obj2 = obj1;

obj2.name = "Bob";

console.log(obj1.name); // 输出 "Bob"

console.log(obj2.name); // 输出 "Bob"

在这个例子中,将变量obj1赋值给变量obj2时,实际上是将指向对象的引用复制给obj2。后续对obj2的修改也会影响obj1,因为它们引用的是同一个对象。

需要注意的是,在引用赋值中修改对象的属性不会改变原始对象的引用,但是重新赋值一个新的对象会改变原始对象的引用。例如:

let obj1 = { name: "Alice" };

let obj2 = obj1;

obj2 = { name: "Bob" };

console.log(obj1.name); // 输出 "Alice"

console.log(obj2.name); // 输出 "Bob"

在这个例子中,重新赋值一个新的对象给obj2,不会影响obj1,因为它们引用的是不同的对象。

总结起来,JavaScript中的赋值操作是根据数据类型的不同而有所区别。

基本类型(Primitive Types,原始类型):

包括Number, String, Boolean, Undefined, Null, Symbol, BigInt;

赋值操作会创建一个新的副本(值复制);

修改一个变量不会影响另一个变量,即两个变量互不影响。

引用类型(Reference Types):

包括Object, Array, Function 等;

赋值操作复制的是引用(地址),而不是实际的数据;

修改一个变量可能会影响另一个变量,因为它们指向同一个对象,或者它们引用的是同一个对象。

基本类型(Primitive Types)赋值是值赋值(value assignment),引用类型(Reference Types)赋值是引用赋值(reference assignment)。

值赋值是复制数据的值,而引用赋值是复制数据的引用。这导致了一个重要的区别:

对于值赋值,变量和原始值是独立的,对变量的修改不会影响原始值;

而对于引用赋值,变量和原始值共享同一个内存地址,对变量的修改会影响原始值。需要注意的是,这种影响仅限于修改对象的属性,而不是重新赋值一个新的对象。如果重新赋值一个新的对象给一个变量,那么原始对象的引用将会改变。

【基本类型(Primitive Types)也有人称为简单类型,引用类型(Reference Types)也有人称为复杂类型】

这种分类和赋值行为在 JavaScript 中是非常重要的概念,理解它们有助于避免在处理数据时产生意外的副作用。

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

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

相关文章

Docker Minio rclone数据迁移

docker minio进行数据迁移 使用rclone进行数据迁移是一种非常灵活且强大的方式,特别是在处理大规模数据集或跨云平台迁移时。rclone是一款开源的命令行工具,用于同步文件和目录到多种云存储服务,包括MinIO。下面是使用rclone进行数据迁移至Mi…

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案 一, 文章简介二,硬件平台构建2.1 音频源板2.2 音频收发板2.3 双板硬件连接 三,软件方案与软件实现3.1 方案实现3.2 软件代码实现3.2.1 4路I2S接收3.2.2 I2S DMA pingpong配置3.2.3 音频数…

卧室激光投影仪推荐一下哪款效果最好?当贝X5S亮度卧室开灯照样清晰

现在家庭卧室装投影仪也不是什么稀奇的事情了,外面客厅看电视机,里面卧室投影仪直接投白墙各有各的优势。躺在卧室的床上,看超大屏投影真的很惬意。卧室投影的品类比较多,有些价格便宜的投影宣传说卧室看很适合,其实不…

设计模式12-构建器

设计模式12-构建器 由来和动机原理思想构建器模式的C代码实现构建器模式中的各个组件详解1. 产品类(Product)2. 构建类(Builder)3. 具体构建类(ConcreteBuilder)4. 指挥者类(Director&#xff0…

实战:OpenFeign使用以及易踩坑说明

OpenFeign是SpringCloud中的重要组件,它是一种声明式的HTTP客户端。使用OpenFeign调用远程服务就像调用本地方法一样,但是如果使用不当,很容易踩到坑。 Feign 和OpenFeign Feign Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客…

rabbitmq生产与消费

一、rabbitmq发送消息 一、简单模式 概述 一个生产者一个消费者模型 代码 //没有交换机,两个参数为routingKey和消息内容 rabbitTemplate.convertAndSend("test1_Queue","haha");二、工作队列模式 概述 一个生产者,多个消费者&a…

C4D2024软件下载+自学C4D 从入门到精通【学习视频教程全集】+【素材笔记】

软件介绍与下载: 链接: 链接:https://pan.baidu.com/s/1n8cripcv6ZTx4TBNj5N04g?pwdhfg5 提取码:hfg5 基础命令的讲解: 掌握软件界面和基础操作界面。学习常用的基础命令,如建模、材质、灯光、摄像机…

设计模式-领域逻辑模式-结构映射模式

对象和关系之间的映射,关键问题在于二者处理连接的方式不同。 表现出两个问题: 表现方法不同。对象是通过在运行时(内存管理环境或内存地址)中保存引用的方式来处理连接的,关系数据库则通过创建到另外一个表的键值来处…

昇思25天学习打卡营第19天|munger85

Diffusion扩散模型 它并没有那么复杂,它们都将噪声从一些简单分布转换为数据样本,Diffusion也是从纯噪声开始通过一个神经网络学习逐步去噪,最终得到一个实际图像 def rearrange(head, inputs): b, hc, x, y inputs.shape c hc // head r…

大数据平台之HBase

HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是Apache Hadoop生态系统的重要组成部分。它特别适合大规模结构化和半结构化数据的存储和检索,能够处理实时读写和批处理工作负载。以下是对HBase的详细介绍。 1. 核心概念 1.1 表&#x…

TIA博途V19无法勾选来自远程对象的PUT/GET访问的解决办法

TIA博途V19无法勾选来自远程对象的PUT/GET访问的解决办法 TIA博途升级到V19之后,1500CPU也升级到了V3.1的固件,1200CPU升级到了V4.6.1的固件, 固件升级之后,又出现了很多问题,如下图所示,在组态的时候会多出一些东西, 添加CPU之后,在属性界面可以看到“允许来自远程对象…

第二讲:NJ网络配置

Ethernet/IP网络拓扑结构 一. NJ EtherNet/IP 1、网络端口位置 NJ的CPU上面有两个RJ45的网络接口,其中一个是EtherNet/IP网络端口(另一个是EtherCAT的网络端口) 2、网络作用 如图所示,EtherNet/IP网络既可以做控制器与控制器之间的通信,也可以实现与上位机系统的对接通…

python爬虫基础——Webbot库介绍

本文档面向对自动化网页交互、数据抓取和网络自动化任务感兴趣的Python开发者。无论你是初学者还是有经验的开发者,Webbot库都能为你的自动化项目提供强大的支持。 Webbot库概述 Webbot是一个专为Python设计的库,用于简化网页自动化任务。它基于Seleniu…

高速ADC模拟输入接口设计

目录 基本输入接口考虑 输入阻抗 输入驱动 带宽和通带平坦度 噪声 失真 变压器耦合前端 有源耦合前端网络 基本输入接口考虑 采用高输入频率、高速模数转换器(ADC)的系统设计是一 项具挑战性的任务。ADC输入接口设计有6个主要条件: 输入阻抗、输入驱动、带宽…

【RaspberryPi】树莓派系统UI优化

接上文,如何去定制一个树莓派的桌面系统,还是以CM4为例。 解除CM4上电USB无法使用问题 将烧录好的tf卡通过读卡器插入到电脑上,进入boot磁盘,里面有一个Config文件,双击用记事本打开,在【pi4】一栏里加入一…

农业农村大数据底座:实现智慧农业的关键功能

随着信息技术的快速发展,农业领域也在逐步实现数字化转型。农业农村大数据底座作为支持智慧农业发展的重要基础设施,承载了多种关键功能,为农业生产、管理和决策提供了前所未有的支持和可能性。 ### 1. 数据采集与监测 农业农村大数据底座首…

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法 一、环境介绍1.1 本次环境规划1.2 kubernetes简介1.3 kubernetes特点二、本次实践介绍2.1 本次实践介绍2.2 报错场景三、查看报错日志3.1 查看pod描述信息3.2 查看pod日志四、报错分析五、故障处理…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后,第一次启动失败,提示:WSL update failed 解决方案 打开Windows PowerShell 手动执行: wsl --set-default-version 2 wsl --update

使用C#手搓Word插件

WordTools主要功能介绍 编码语言:C#【VSTO】 1、选择 1.1、表格 作用:全选文档中的表格; 1.2、表头 作用:全选文档所有表格的表头【第一行】; 1.3、表正文 全选文档中所有表格的除表头部分【除第一行部分】 1.…

便携式自动气象站:科技赋能气象观测

便携式自动气象站,顾名思义,就是一款集成了多种气象传感器,能够自动进行气象观测和数据记录的设备。它体积小巧、重量轻,便于携带和快速部署,可以在各种环境下进行气象数据的实时监测。同时,通过内置的无线…