首页 web前端 js教程 JavaScript引用赋值详解

JavaScript引用赋值详解

Apr 17, 2017 pm 05:54 PM
javascript

JavaScript中没有指针,并且JavaScript中的引用与我们通常看到的大多数其他流行编程语言的工作方式不同。在JavaScript中,不可能有一个变量到另一个变量的引用。而且,只有复合值(例如对象或数组)可以通过引用来赋值。


整片文章中将使用下列属于:

1、标量–单个值或数据单元(如整数、布尔值、字符串)

2、复合--由多个值组成(如数组、对象、集合)

3、原始 - 直接的价值,而不是对包含值的东西的引用。

JavaScript的标量类型是原语,不像其他一些语言(如Ruby)具有标量引用类型。注意,在JavaScript中,标量原始值是不可变的,而复合值是可变的。


概要:

1.分配给变量的值的类型决定该值存储的是值还是引用。

2.在变量赋值的时候,标量原始值(Number,String,Boolean,undefined,null,Symbol)通过值来赋值,复合值通过引用来赋值。

3.JavaScript中的引用仅指向包含的值,不指向其他变量或引用。

4.在JavaScript中,标量原始值是不可变的,复合值是可变的。


通过值赋值的快速示例

在下面的代码片段中,我们将一个标量原始值(一个数字)分配给一个变量,因此这里是通过值来赋值。首先,变量 batman被初始化,当变量superman被分配存储在batman中的值的时候,实际上是创建了该值的一个副本并存储在变量superman中。当变量superman被修改时,变量batman不会受到影响,因为它们指向不同的值。

var batman = 7;
var superman = batman;   //通过值来赋值
superman++;
console.log(batman);     //7
console.log(superman);   //8
登录后复制

JavaScript引用赋值详解


通过引用赋值的快速示例

在下面的代码片段中,我们将一个复合值(数组)赋值给一个变量,因此这里是通过引用赋值。变量flash和quicksilver是相同的值(也称为共享值)的引用。当修改共享值时,引用将指向更新的值。

var flash = [8,8,8];
var quicksilver = flash;   //通过引用来赋值
quicksilver.push(0);
console.log(flash);        //[8,8,8,0]
console.log(quicksilver);  //[8,8,8,0]
登录后复制

JavaScript引用赋值详解


如何创建一个新的引用

当变量中的复合值被重新赋值的时候,将创建一个新的引用。在JavaScript中,与大多数其他流行的编程语言不同是:引用指向存储在变量中的值,不指向其他变量或者引用。

var firestorm = [3,6,3];
var atom = firestorm;   //通过引用来赋值
console.log(firestorm); //[3,6,3]
console.log(atom);      //[3,6,3]
atom = [9,0,9];         //通过值来赋值 (创建新的引用)
console.log(firestorm); //[3,6,3]
console.log(atom);      //[9,0,9]
登录后复制

JavaScript引用赋值详解


当引用作为函数参数传递时,引用如何工作

在下面的代码片段中,变量magneto是一个复合值(一个数组),因此它作为一个引用被赋值给了变量x(函数参数)。

在IIFE中调用的Array.prototype.push方法会通过JavaScript引用来改变变量中的值。但是,变量x的重新赋值会创建一个新的引用,并且对变量x的进一步修改不会影响到变量magneto的引用。

var magneto = [8,4,8];
(function(x) {        //IIFE
    x.push(99);
    console.log(x);   //[8,4,8,99]
    x = [1,4,1];      //重新赋值变量 (创建一个新的引用)
    x.push(88);
    console.log(x);   //[1,4,1,88]
})(magneto);
console.log(magneto); //[8,4,8,99]
登录后复制


如何更改作为函数参数通过JavaScript引用传递的复合变量中的原始值

这里的解决方案是修改引用指向的现有复合值。在下面的代码片段中,变量wolverine是一个复合值(一个数组)并且在IIFE中被调用,变量x(函数参数)是被赋值了一个引用。

可以通过将属性Array.prototype.length的值设置为0来创建一个空数组。因此,变量wolverine通过JavaScript引用更改为变量x中的新值。

var wolverine = [8,7,8];
(function(x) {              //IIFE
    x.length = 0;           //创建空数组对象
    x.push(1,4,7,2);
    console.log(x);         //[1,4,7,2]
})(wolverine);
console.log(wolverine);     //[1,4,7,2]
登录后复制


如何通过按值赋值来存储复合值

这里的解决方案是制作复合值的手动副本,然后将复制的值分配给变量。因此,分配值的引用不指向原始值。

创建一个(浅)复合值副本(数组对象)推荐调用Array.prototype.slice方法,而不传递任何参数。

var cisco = [7,4,7];
var zoom = cisco.slice();  //创建浅复制
cisco.push(77,33);
console.log(zoom);         //[7,4,7]
console.log(cisco);        //[7,4,7,77,33]
登录后复制

JavaScript引用赋值详解


如何通过按引用赋值来存储一个标量初始值

这里的解决方案是将标量原始值包含在复合值(即对象或数组)中作为其属性值。因此,它可以通过引用来赋值。在下面的代码片段中,变量speed中的标量原始值设置为flash对象的属性。因此,在调用IIFE的时候,它通过引用赋值给了x(函数参数)。

var flash = { speed: 88 };
(function (x) {             //IIFE
    x.speed = 55;
})(flash);
console.log(flash.speed);   //55
登录后复制

以上是JavaScript引用赋值详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何为VMware虚拟机启用复制和粘贴 如何为VMware虚拟机启用复制和粘贴 Feb 21, 2024 am 10:09 AM

您可以轻松地在VMware虚拟机(VM)和物理系统之间复制和粘贴文本和文件。这种功能让您可以方便地在虚拟机和主机系统之间传输图像、格式化和非格式化文本,甚至电子邮件附件。本文将向您展示如何启用这一功能,并演示复制数据、文件和文件夹的方法。如何在VMware中启用复制/粘贴VMware提供了三种不同的方式将数据、文件或文件夹从虚拟机复制到物理计算机,反之亦然,如下所述:复制和粘贴要素拖放功能文件夹共享1]使用VMware工具启用复制粘贴如果您的VMWare安装和来宾操作系统满足要求,则可以使用键盘

如何在Word中复制页面 如何在Word中复制页面 Feb 20, 2024 am 10:09 AM

是否要复制MicrosoftWord中的页面,并保持格式不变?这是一个聪明的想法,因为当您想要创建特定文档布局或格式的多个副本时,在Word中复制页面可能是一种有用的节省时间的技术。本指南将逐步引导您在Word中复制页面的过程,无论是创建模板还是复制文档中的特定页面。这些简单的说明旨在帮助您轻松地重新制作页面,省去从头开始的麻烦。为什么要在MicrosoftWord中复制页面?在Word中复制页面非常有益的原因有以下几点:当您有一个具有特定布局或格式的文档要复制时。与从头开始重新创建整个页面不同

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

在终端中禁用或启用自动复制所选内容以进行复制 在终端中禁用或启用自动复制所选内容以进行复制 Mar 24, 2024 am 09:46 AM

本文将向您介绍如何在Windows终端中启用或禁用自动将选择内容复制到剪贴板的功能。Windows终端是微软专为Windows11/10开发的多标签终端模拟器,取代了传统的命令提示符。它支持运行命令提示符、PowerShell、WSL、Azure等应用程序。通常在终端工作时,用户需要复制命令和输出,然而终端默认情况下不支持复制选择操作。请继续阅读本文,了解如何解决这个问题。如何在终端中启用或禁用自动复制所选内容到缓存?以下是您如何启用或禁用自动复制选择到终端剪贴板:打开终端应用程序,然后点击上面

See all articles