变量
ECMAScript的变量是松散类型的 ,即定义一个变量就可以用来保存任何类型的数据,或者也可以这么理解,变量就是一个用于保存值的占位符,要保存的值很长,不容易记,或者记住这个保存的值 是随时变的不确定的,就将这个值保存在了变量中,这个变量也就是指向这个值的一个指针,指向这个值的一个引用。ECMAScript中变量的声明用var 操作符,在var后跟一个变量既可以,就是一个变量的声明,如下实例所示:
function test(){ var msg; var msg2 = "hello world!"; }
如上代码定义的msg和msg2变量可以用来保存任何数值,如Number类型的123,String类型的"hello world!"等等,但是像msg这样只有声明而没有被赋值的变量中保存了一个特殊的数值——undefined;变量msg2被赋了一 个String类型的“hello world!”的值,像这样声明了一个变量又被赋了一个初始值,就叫做变量的初始化。还是这个代码,虽然为msg2赋了一个初始的String类型的值, 但String类型仅表示的是msg2被赋予的值是String类型的,并不代表msg2是String类型的,不能再被赋予其他类型的值了,msg2的 类型仍然可以随时改变,可以在修改值的同时修改msg2的类型,如下所示:
function test(){ var msg; var msg2 = "hello world!"; msg2 = 100; //这种方法有效,但并不推荐这么做 }
这里定义的msg和msg2都是局部变量,只在函数test()有效,在函数test()外是访问不到的。
前面提到了在ECMASCript中定义变量可以使用var操作符,那么是可以使用,也就是说也可以不使用var操作符也是可定义变量的。如:
function test(){ msg = "test"; //没有使用var操作符 }
这样省略了var操作符定义的变量,就成了全局变量了,它的作用范围不仅局限在test()函数中了,在函数的外部 也可以访问,随时可以被test()函数外部的应用调用。虽然可以像上面的例子那样省略var草祖父定义变量,但是并不推荐这种做法,因为在一个局部的函 数中定义全局变量是很难维护的,也可能会因为省掉var操作符导致相应的变量不会立刻得到有效的定义而导致不必要的混乱。还是那句话,带上var,保证不 出错,而且易维护,省略后不一定出错,但是不易维护,那么我们何乐而不为呢。
最后说一个定义变量时的小技巧,就是可以使用一条语句定义多个变量(变量初始化或不初始化均可),每个变量用逗号分隔开即可,如下面实例所示:
function test(){ var msg = "hello world!", msg2 = 123, msg3 = false; }