JavaScript的变量详解

news2025/1/25 9:06:33

一、变量的声明和赋值

编程中的程序其本质就是处理数据的过程,当输入指令时,就可以输出相应的内容,在输入和输出之间就是处理数据的过程。处理的数据可能有多种,多个,这时就需要使用不同的名字来存储、区分和提取不同的数据,这个名字就是编程中所叫的变量,简单的来说,可以把变量理解为一个容器,而容器的主要功能就是存储和获取。

1、变量声明

JavaScript是弱类型语言,与之相对应的是强类型语言,所谓强弱之分就是变量保存数据类型的区分,弱类型语言可以保存任意数据类型,而强类型语言必须在声明前指定变量的类型,被规定数据类型的变量只能保存对应的数据格式,常见的强类型语言有:C C++ Java,它们声明变量的同时必须同时声明其类型,在存储数据时必须存储对应的数据类型

float f; // 声明一个浮点类型的变量
int i; // 声明一个整数类型的变量

弱类型的JavaScript在声明变量时无需指定任何数据类型,也就是说每个变量仅仅保存数据值的一个占位符而已,可以被用来存储任意数据类型的值,在未对变量赋值之前变量会被系统默认为undefined(未定义的)

// 语法: var 变量名;
var zhishunet;


// 我们也可以使用逗号(,)一次性定义多个变量
var zhishunet, zhishuseo, zhishu

// 对于未声明的变量赋值时,变量就成为全局变量了
<script>
    zhishunet = "www.zhishunet.com"
    alert(zhishunet);  // 输出 www.zhishunet.com
</script> 

2、变量赋值

// 变量相当于容器,它的主要功能就是存储和读取,在JS中使用等号 “=” 运算符为变量赋值
// 语法: 变量名 = 数据值;

zhishunet = "www.zhishunet.com"

// 还有就是在声明变量的同时为变量赋值,将声明和赋值步骤合并为一行
// 语法: var 变量名 = 数据值;

var zhishunet = "www.zhishunet.com"

// 当多次对同一变量赋值时,相当于对该变量德的值进行重写

var zhishu = "www.zhishunet.com"
document.write(zhishu);
zhishu = "www.zhishunet.cn"
document.write(zhishu);

二、变量提升

// 变量提升又称为声明提前 举个例子:
var zhishu = "zhishunet"
var zhishu = "zhishuseo"

// 上面的例子就是在一个脚本中两次声明变量,但是js中所有全局变量的声明都会提升到脚本执行之前,而赋值操作会保留在原位置,上面代码解析步骤为:
var zhishu;
zhishu = "zhishuent";
zhishu = "zhishuseo";

三、全局变量和局部变量

全局变量和局部变量对应的两个范围分别时全局作用域和局部作用域,一个js文件或者HTML文件就相当于一个全局作用域,在全局作用域下可以包含多个小的区域,这些小区域就可以称作局部作用域,在全局作用域喜爱声明的变量就成为全局变量,在局部作用域下声明的变量就是局部变量,一般我们用函数声明布局作用域。全局作用域能够在任意位置使用,局部作用域仅能够在局部区域使用

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>知数SEO_专注搜索引擎优化和品牌推广</title>
</head>
<body>
<script>
    var url = "www.zhishunet.com";
    function demo(){
        var zhishunet = "www.zhishuseo.cn"
        document.write('<h2>',url,'</h2>');
        document.write('<h2>',zhishunet,'</h2>');
    }
    demo();
    document.write('<h2>',url,'</h2>');
    document.write('<h2>',zhishunet,'</h2>');
</script>
</body>
</html>

函数使用过后局部变量会自动销毁,js提供了一种内存管理机制,也称为垃圾回收机制 

四、变量的命名规则

1、变量其实就是标识符的一种,其命名规则与标识符保持一致,可以简单的理解为:

数字、字母、下划线、美元符,首字不能为数字

2、js区分大小写,可以使用驼峰命名法

大驼峰:GetNameByID

小驼峰:getNameByID (推荐)

五、ES6新特性的局部变量

ES6中有一种新的局部变量的声明方式,关键字为let,这种新方法的出现是为了让var的功能更具有专一性和单一性,让var专一的去声明全局变量

1、let关键字的基本使用

// 语法:let 变量名
let zhishunet;

// let 和 var 的语法格式相同,但let关键字实现了功能的专一性和单一性,它为局部变量而生,但是在全局作用域内依然可以使用(坑)

function demo(){
    let url = "www.zhishunet.com";
}

2、区块作用域

// 区块作用域使用方法是用大括号{}为局部作用域定界,let和区块作用域结合可增强代码的可读性和维护性

{
    let url = "www.zhishunet.com";
}

alert(url);  // 没输出 因为是局部变量

3、关键字let和var的区别

// 1、、没有变量提升

// 2、不能重复声明
// 使用var声明过的变量不能再次使用let声明,使用let声明过的变量也不能再次使用var或let声明

let和var声明方式的区别

关键字varlet
作用域全局或局部作用域局部作用域
是否可以重复声明可以不可以
是否可以重复赋值可以可以
是否有变量提升可以不可以

 

六、ES6新特性的局部变量

常量与变量相对应,常量是一旦定义就不会改变的数据,在项目开发中我们常见的常量名有网站域名,标题以及数学中的圆周率等等,这些就是一旦定义就不希望改变的数据,在ES6之前我们用var 加变量名大写的方式定义常量,ES6新增了const关键字用来声明常量,与var不同 const声明常量时必须进行初始化赋值,否则会报错

// 注意:常量一旦被赋值就不能被重新赋值,一旦定义则无法修改
const SITE = "www.zhishunet.com";
document.write('<h2>',SITE,'</h2>');

// const可以在局部作用域中声明,可以成为局部变量,局部变量不能在局部作用域之外使用

// 常量没有变量提升效果、不能被重复声明、不能被重新赋值、

常量声明注意事项

关键字const
作用域全局或局部作用域
是否可以重复声明同一作用域下不能
是否可以重复赋值不能
是否有变量提升不能

七、ES6新特性的解构赋值

在ES6以前,变量只能被单独赋值,批量赋值的方式无法实现,在ES6中允许按照一定模式从数组和对象中提取值来对变量进行赋值,成为解构(Destructuring)

// 数组和对象都能在单个变量中存储多个数据值,如
[1,2,3]; // 包含三个元素的数组

// ES6 可以这样赋值
var [a,b,c] = [1,2,3];

// 之前的写法
var a = 1;
var b = 2;
var c = 3;

// 除了var关键字之外,let const关键字同样适用于解构

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

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

相关文章

Neo4j知识图谱(2)创建与删除

Neo4j - CQL简介_w3cschoolhttps://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html一、创建节点 create(n:Person{name:何仙鸟,age:21}) create就是创建&#xff0c;无论是点还是边都是用create来创建 n相当于一个别名&#xff0c;比如创建一个Person&#xff0c;而Pe…

【数据库】MySQL性能分析和优化

导语 当数据量非常庞大时,使用MySQL进行select操作可能会出现耗时特别多的情况。例如:在一张百万数据的表格good中执行select * from good;查询耗时可能需要十几秒,让客户等待十几秒,是不被接受的, 此时我们就需要对相关语句进行性能分析并优化。下面就一起看一下MySQL的…

八. 实战:CUDA-BEVFusion部署分析-学习spconv的优化方案(Explicit GEMM conv)

目录 前言0. 简述1. 什么是Explicit GEMM Conv2. im2col3. spconv是如何使用Explicit GEMM Conv的4. 使用Explicit GEMM Conv处理spconv的优缺点5. 拓展-conv加速5.1 Introduction5.2 im2col5.3 Forward graph5.4 Backward graph5.5 Python example for forward propagation5.6…

研0或研一|如何快速入门深度学习?

一、经验建议 1️⃣课程篇 直接上手B站【小土堆PyTorch深度学习快速入门教程】&#xff0c;共计9h50min左右&#xff0c;预计一周就可以学完&#xff0c;比较偏向理论和实践相结合跟李沐学AI B站【动手学深度学习 PyTorch版】刘二大人B站【PyTorch深度学习实践】&#xff0c;…

Python武器库开发-武器库篇之Whois信息收集模块化(四十五)

Python武器库开发-武器库篇之Whois信息收集模块化(四十五) 我们在进行渗透的时候&#xff0c;需要进行全面的信息收集&#xff0c;除了主动信息收集之外&#xff0c;我们还经常会进行被动信息收集&#xff0c;Whois信息收集就是其中的一种,我们可以利用一些网站进行Whois信息收…

uniCloud 云数据库(1)

目录 1&#xff1a;云数据库入门,基本概念了解 1.1 云数据库是关系型还是Nosql? 1.2 uniCloud 云数据库和关系型数据库的对比 1.3 官方文档传送门 2: 基本操作表 创建 在uniCloud web控制台 进行创建 数据表的3个组成部分 通过传统方式操作数据库 获取集合的引用 集…

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

【Nacos】Nacos 双端版本升级实战手册

背景 由于原来使用的 Nacos 版本&#xff08;1.1.4&#xff09;存在安全漏洞&#xff0c;需要进行升级修复。经过查询后&#xff0c;决定将版本升级到2.2.4。 Nacos 服务共有三个&#xff1a; 192.168.2.190:8848192.168.2.191:8848192.168.2.192:8848 步骤 服务端升级&am…

宝塔安装redis并且远程连接redis教程

第一步&#xff1a;搜索redis并安装 第二步&#xff1a;在防火墙添加端口6379 第三步&#xff1a;查看宝塔防火墙是否开启了6379端口 firewall-cmd --zonepublic --list-ports 很显然并没有开启 第四步&#xff1a;开启防火墙的6379端口 firewall-cmd --zonepublic --add-po…

SLAM第十四讲

基础知识 四元数 先将三维空间的点p(x,y,z) 变成四元数的表示q(0,x,y,z) 其中0为四元数的实部&#xff0c;x,y,z为四元数的虚部。 实部为0的四元数也叫纯虚四元数。 通过 左乘四元数&#xff…

Vue3项目引入canvaskit-wasm库(skia库的wasm版)

1 安装canvaskit-wasm npm install canvaskit-wasm 或者 yarn add canvaskit-wasm 2 将文件node_modules/canvaskit-wasm/bin/canvaskit.wasm复制到public目录 3 引入到组件中 <template><img :src"imgData"/> </template><script setup>…

Redis命令 - Sets命令组常用命令

Set集合&#xff0c;无序&#xff0c;一堆不重复值的组合。利用redis提供的set数据结构&#xff0c;可以存储一些集合性的数据。 使用场景&#xff1a;例如&#xff0c;实现如共同关注、共同喜好、二度好友等 1、SADD key member [member …] 向集合中添加一个或者多个成员 …

顺序表实现(下)(C语言)

几道相关例题,帮助大家更好理解顺序表. 文章目录 前言 一、顺序表二、创建顺序表并初始化三.删除非递减顺序表L中的重复元素四.在非递减顺序表中删除[s,t]之间的元素五.设计算法逆置顺序表L,并将序列L循环左移六.顺序表A和B的元素个数分别为m,n.A表升序排序,B表降序排序,两表中…

四、Qt 的第一个demo

在上一篇章节里《三、Qt Creator 使用》&#xff0c;我们介绍了如何使用Qt Creator创建一个简单的带窗体的demo&#xff0c;在这一章节里&#xff0c;我们详细讲解一下这个demo的文件组成&#xff0c;及主函数&#xff0c;并在UI上加一些控件&#xff0c;实现一些简单的功能。 …

SDRAM小项目——写模块

写模块跟着视频看了一个多星期&#xff0c;一开始始终有点弄不清楚&#xff0c;现在记录一下理解的过程。 阅读文档信息&#xff1a; 首先阅读文档信息&#xff0c;了解SDRAM写过程的状态转换和时序图 SDRAM整体状态流程如图所示&#xff1a; 在SDRAM整体系统中&#xff0c…

谈⼀谈你对TCPIP四层模型,OSI七层模型的理解

TCP/IP四层模型 对比 OSI七层模型 OSI七层模型 为了增强通⽤性和兼容性&#xff0c;计算机⽹络都被设计成层次机构&#xff0c;每⼀层都遵守⼀定的规则。因此有了OSI这样⼀个抽象的⽹络通信参考模型&#xff0c;按照这个标准使计算机⽹络系统可以互相连接 物理层 通过⽹线、光…

南京观海微电子----时序分析基本概念(一)——建立时间

1. 概念的理解 以上升沿锁存为例&#xff0c;建立时间&#xff08;Tsu&#xff09;是指在时钟翻转之前输入的数据D必须保持稳定的时间。如下图所示&#xff0c;一个数据要在上升沿被锁存&#xff0c;那么这个数据就要在时钟上升沿的建立时间内保持稳定。 建立时间是对触发器而…

Akira勒索软件团伙及其策略的全面解析

Sophos MDR威胁情报团队曾于2023年5月发表过一篇博文&#xff0c;称Akira勒索软件“将1988年的时光带回”。起因是Akira会将受害者网站篡改为具有复古美学的页面&#xff0c;让人想起20世纪80年代的绿色屏幕控制台。而且&#xff0c;Akira的名字也可能取自1988年流行的同名动画…

HCIA的访问控制列表ACL

ACL&#xff1a;访问控制列表 -----控制列表&#xff08;策略列表&#xff09; 功能&#xff1a; 1&#xff1a;定义感兴趣的路由&#xff08;控制层面&#xff09; 可以定义感兴趣的路由&#xff0c;可以把感兴趣的路由抓取出来&#xff0c;给它做过滤&#xff0c;也可以改变…

polar CTF CB链

一、题目 二、解答 1、通过jar包&#xff0c;可以看到/user路由下有反序列化操作 看到存在commons-beanutils依赖且版本为1.9.2&#xff0c;可利用CB链Getshell。 使用ysoserial项目中的CommonsBeanutils1链写一个POC&#xff0c;注意确保ysoserial项目中的pom.xml中的comm…