变量代表了系统的一个存储区域。所有的编程语言都提供了变量这个语言元素。变量用于存储数据,比如数值或字符串。变量有三个方面的特性:名称、类型以及变量的值。
JavaScript是一种动态语言,对于JavaScript而言,它没有变量类型。也就是说,在声明变量时不需要指定变量的类型,变量类型由赋值给变量的值所确定。JavaScript不能像Java和C++那样在声明变量的时候指定变量的数据类型。
typeof运算符
如果需要查看变量的类型,可以使用typeof
运算符来查看。typeof
的使用方法有两种,这两种方法是等价的。
typeof operand
typeof (operand)
在JavaScript中,常用的变量类型有:Number、String、Boolean、Array和Date。对于字符串类型,typeof
返回string
,数值类型的值返回number
,布尔类型的值返回boolean
,对象类型的值返回object
,函数类型的值返回function
。如果一个变量没有定义,那么typeof
对这个变量操作的结果为undefined
。
null和undefined类型
Null
和Undefined
也是JavaScript的数据类型。Null
的取值为null,表示"没有值"。Null
既不是0,也不是空字符串,而是JavaScript的一种对象类型。Null
用于初始化变量,以避免产生错误,也用于清除变量的内容,从而释放于变量关联的内存空间。当把Null
赋值给某个变量后,该变量就不再保存任何有效数据了。
对于一个已经声明但为赋初值的变量来说,它的值为undefined
,如果在程序中直接使用这个值,会导致程序出错。对于这样的变量,可以使用typeof
来判断其类型,typeof
返回的值将是字符串undefined
。如果声明变量后,把null
赋值给这个变量,那么这个变量的值为null
,在程序中使用这个变量时将不会导致运行时错误。
单词undefined
不是JavaScript中的关键字,而是系统预定义的一个全局变量。null
和undefined
既有联系,又有一定的区别。当使用==
运算符来判断这两个值是否相等的时候,得到的结果为相等。如果想区分判断null
和undefined
,应该使用测试一致性的运算符===
。
typeof(null); //object
typeof(undefined); //undefined;
null == undefined; //true
null === undefined; //false
变量的声明和变量的初始化
变量在使用之前必须声明,这不仅是JavaScript的要求,也是一个好的编程习惯。JavaScript声明变量有两种方式:使用关键字var
显示声明变量和使用赋值语句隐式的声明变量。
在声明变量的同时,可以为变量指定一个值,这个过程称为变量的初始化。如果没有为变量赋初值,那么这个变量的值为undefined
。
变量声明语句的一般格式为:
var variable_name = value; //声明变量的同时初始化变量
var variable_name; //声明变量,但没有进行初始化
variable_name; //在为变量赋值的同时声明变量
变量的作用域
变量的作用域指的是变量的作用范围或使用范围。JavaScript有两种变量:全局变量和局部变量。全局变量在整个页面中都可以使用(要在变量声明之后);局部变量则只能在函数中使用,并且局部变量必须使用var
关键字来声明。
声明一个局部变量:
function fn1(){
var a = 10; //声明一个局部变量,该变量的作用域为fn1()函数
alert(a);
}
当在函数内部没有使用var
来声明变量的时候,这个变量就会作为全局变量来声明。
function fn2(){
b = 10; //声明一个全部变量,该变量可以在fn2()函数之后的所有地方使用
alert(b);
}
最佳实践:在函数中定义的变量一定使用添加var
来声明。
另外需要注意的是,同名局部变量会在作用域内覆盖同名的全局变量,使用时要特别注意。