JavaScript是弱类型语言,可以不需要声明变量而直接使用。这样虽然简单但不易发现变量名方面的错误,所以不建议这样做。
通常的做法是使用JavaScript变量前先声明变量。目前,JavaScript变量声明方式有3种,分别是var、let和const关键字声明。
其中var声明变量,是ECMAScript6版本以前一直使用的方式,由于这种方式声明的变量在某些情况下会导致一些问题,因而ECMAScript6版本中增加了使用let和const两种声明变量。
JavaScript采用弱数据类型的形式,因而JavaScript变量是一种自由变量。它在程序的运行过程中可以接受任何类型的数据,不管使用哪种方式声明,在声明时都无需指定数据类型,这一点和强类型的Java等语言的变量声明需要指定变量的数据类型存在很大的不同。
var、let和const虽然都可声明变量,但它们之间存在许多不同之处。
一、使用var声明变量
使用var可声明全局或函数级别作用域的变量,声明语法存在以下几种方式。
方式一:var 变量名;
方式二:var 变量名1,变量名2,……,变量名n;
方式三:var 变量名1 = 值1,变量名1 = 值1,……,变量名n = 值n,
**1)**使用var可以一次声明一个变量,也可以一次声明多个变量,不同变量之间使用逗号隔开。例如:
01: var name; //一次声明一个变量
02: var name,age,gender; //一次声明多个变量
**2)**声明变量时可以不初始化(即赋初值),此时其值默认为undefined;也可以在声明变量的同时初始化变量。例如:
01:var name = "张三"; //声明的同时初始化变量
02:var name = "张三" , age = 20 , gender; //在一条声明中初始化部分变量
03:var name = "张三" , age = 20 , gender = '女'; //在一条声明中初始化全部变量
**3)**变量的具体数据类型根据所赋的值的数据类型来确定,例如:
01:var message = "hello"; //值为字符串类型,所以message变量的类型为字符串类型。
02:var message = 123; //值为数字类型,所以message变量的类型为数字类型
03:var message = true; 、//值为布尔类型,所以message变量的类型为布尔类型。
**4)**在实际应用中,常常直接将循环变量的生命作为循环语法的一部分。例如:
01:for(var i = 0 ; i < 10 ; i += )
{ ……
}
二、使用let声明变量
使用 let 可以声明块级别作用域的变量,声明的格式和var声明变量的格式一样,存在3种方式,如下所示:
方式一:let 变量名;
方式二:let 变量名1,变量名2,……,变量名n;
方式三:let 变量名1 = 值1,变量名1 = 值1,……,变量名n = 值n,
使用let声明变量的语法说明和var声明变量的完全相同。使用let声明变量的示例如下:
01: let age;
02: let age = 32 , name = " Tom ";
三、使用const声明变量
使用 var 和 let 声明的变量在脚本代码的运行过程,值可以改变。如果希望变量的值在脚本代码的整个运行过程中保持不变,需要使用const来声明,声明格式入如下:
const 变量名 = 值;
需要特别注意的是:使用const声明变量时,必须给变量赋初值,且该值在整个代码的运行过程中不能被修改。另外,变量也不能重复多次声明。这些要求任何一点没满足都会报错。
const声明变量的示例如下:
01: const pi = 3.1415;
四、3种变量声明方式的区别
**1)**变量初始化要求不同:var 和 let 声明变量时可以不需要初始化,没有初始化的变量的值为“undefined”,在代码的运行过程中变量的值可以被修改。const声明变量时必须初始化,并且在代码的整个运行过程中不能修改初始化值,否则运行时会报错。
2) 变量提升的支持不同:var 声明支持变量提升,而 const 和 let 声明不支持变量提升。有关变量提升的内容之后介绍。
3) 对块级作用域的支持不同:var 声明的变量,不支持块级作用域,let 和 const 声明的变量支持块级作用域。凡是使用一对花括号{}括起来的代码都称为一个代码块。所谓块级作用域,指的是有效范围为某个代码块,离开了这个代码块,变量将失效。
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);