JavaScript变量


JavaScript变量详解

JavaScript变量

在编程语言中,变量用于存储数据值,是用于存储信息的”容器”。

声明变量

JavaScript中有几种定义变量的方式:

可使用关键字varconstlet来定义变量, 使用等号来为变量赋值,如:

用var声明变量

使用var可声明全局或函数级别作用域的变量,声明语法存在以下几种方式。

方式一:var 变量名;
方式二:var 变量名1,变量名2,…,变量名n;
方式三:var 变量名1 = 值1,变量名2 = 值2,…,变量名n = 值n;

1) 使用 var 可以一次声明一个变量,也可以一次声明多个变量,不同变量之间使用逗号隔开。例如:

var name; //一次声明一个变量
var name,age,gender; //一次声明多个变量

2) 声明变量时可以不初始化(所谓不初始化,即不赋初值),此时其值默认输出为undefined;也可以在声明变量的同时初始化变量。例如:

var name = "张三"; //声明的同时初始化变量
var name = "张三",age = 20,gender; //在一条声明中初始化部分变量
var name = "张三",age=20,gender = ’女’; //在一条声明中初始化全部变量

3) 变量的具体数据类型根据所赋的值的数据类型来确定,例如:

var message = "hello";//值为字符串类型,所以message变量的类型为字符串类型
var message = 123; //值为数字类型,所以message变量的类型为数字类型
Var message = true;//值为布尔类型,所以message变量的类型为布尔类型

4) 在实际应用中,常常直接将循环变量的声明作为循环语法的一部分。例如:

for(var i=0;i<10;i+=){…}。

使用let声明变量

使用let 可以声明块级别作用域的变量,声明的格式和 var 声明变量的格式一样存在 3 种方式,如下所示:

方式一:let 变量名;
方式二:let 变量名1,变量名2,…,变量名n;
方式三:let 变量名1=值1,变量名2=值2,…,变量名n=值n;

使用 let 声明变量的语法说明和 var 声明变量的完全相同,在此不再赘述。使用 let 声明变量的示例如下:

let age;
let age = 32,name = "Tom";

使用const声明变量

使用 varlet声明的变量在代码的运行过程中,值可以改变。如果希望变量的值在脚本代码的整个运行过程中保持不变,需要使用 const 来声明,声明格式如下:

const 变量名 = 值;

需要特别注意的是:使用 const声明变量时,必须给变量赋初值,且该值在整个代码的运行过程中不能被修改。另外,变量也不能重复多次声明。这些要求任何一点没满足都会报错。

使用 const 声明变量的示例如下:

const a = 1;

几种变量声明方式的区别

1) 变量初始化要求不同:varlet声明变量时可以不需要初始化,没有初始化的变量的值为undefined,在代码的运行过程中变量的值可以被修改。const 声明变量时必须初始化,并且在代码的整个运行过程中不能修改初始化值,否则运行时会报错。

2) 变量提升的支持不同:var 声明支持变量提升,而 const 和 let 声明不支持变量提升。有关变量提升的内容之后介绍。

3) 对块级作用域的支持不同:var 声明的变量,不支持块级作用域,let 和 const 声明的变量支持块级作用域。凡是使用一对花括号{}括起来的代码都称为一个代码块。所谓块级作用域,指的是有效范围为某个代码块,离开了这个代码块,变量将失效。

if (true) {
  let num = 3;
  const msg = "How are you?";
}
alert(num); //num为块级变量,离开判断块后无效,所以报:Uncaught ReferenceError 
alert(msg); //msg为块级变量,离开判断块后无效,所以报:Uncaught ReferenceError
for (let i = 0; i < 9; i ++ ) {     
  var j = i;
}
alert(i);  //i为块级变量,离开循环块后无效,所以报:Uncaught ReferenceError
alert(j);  //j为全局变量,离开循环块后仍有效,所以运行正常,输出结果:8

4) 重复声明:在同一个作用域中,var 可以重复声明同一个变量,let 和 const 不能重复声明同一个变量。

示例代码如下:

var gv1 = "JavaScript";
let gv2 = "JS";
const number = "10000";
var gv1 = "VBcript";   //①
let gv2 = "JScript";   //②
const number = "20000";//③
alert(gv1);
alert(gv2);
alert(number);

上述代码在预解析时,在分析处理到注释 ② 处代码时将报:Uncaught SyntaxError:Identifier’gv2’has already been declared 语法错误信息;分析处理到注释 ③ 处代码时报:Uncaught SyntaxError:Identifier’number’has already been declared 语法错误信息。

这些错误的原因是重复声明了 let 和 const 变量。而注释 ① 处代码则没有问题,这说明 var 可以重复声明变量。但需要注意的是:如果仅仅是为了修改变量的值,不建议重复声明,直接在声明语句后面对变量重新赋值就可以了。

5) let 和 const 存在暂时性死区:当块中存在 let/const 声明语句时,let/const 声明的变量就绑定到这个当前块作用域,不会受外部变量的影响,也不会影响外部变量。这个特点导致了在块作用域中,块变量在块开始到块变量声明之间出现了一个称为“暂时性死区”的区域。在“暂时性死区”中使用块变量,将会导致 ReferenceError。

var msg = "JavaScript";
var p = 123;
if(true){
     console.log("块内输出msg:" + msg);//①
     console.log("块内输出p:" + p);//②
     let msg = "JScript";
     const p = 456;
}
console.log("块外输出msg:" + msg); //③
console.log("块外输出p:" + p); //④

上述代码在预解析时,在解析处理到注释 ① 和 ② 处代码时会报:Uncaught ReferenceError:msg is not definedUncaught ReferenceError:p is not defined错误信息。这个错误原因是因为 ① 和 ② 处代码处在“暂时性死区”中,由此也可见,块变量不会受外部变量影响。

变量名称规范

变量可以使用短名称(比如 x 和 y),也可以使用描述性更好的名称(比如 age, sum, totalvolume)。

-变量必须以字母开头
-变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
-变量名称对大小写敏感(y 和 Y 是不同的变量)

0

【JavaScript变量隶属于分类: JavaScript

它起初由本站用户:编辑于2年前 创建。

该内容的链接是:

目录