JavaScript中的变量定义与储存介绍
与C、Java等编程语言不同,JavaScript中的变量是无类型的,所有的变量定义使用的关键词均为var:
vara; varm,n; varx=42,y="test";
如果定义变量后未对该变量进行赋值,那么该变量的值为undefined。如上面代码中的a、m、n三个变量的值均为undefined。
由于JS中变量是无类型的,因此完全可以对同一个变量进行不同类型的赋值,如:
varb="temp"; console.log(typeofb);//string b=108; console.log(typeofb);//number
除了可以对同一变量进行不同类型的赋值,JavaScript中还可以对变量进行重复定义;如果这么做,则第一次之后的变量定义语句等价于赋值语句:
varc="hello"; console.log(c);//hello varc=true; console.log(c);//true
在ECMAScript标准的严格模式(strictmode)下,所有的变量定义均需使用var关键词。如果不使用严格模式,那么当JS程序对某个未被定义过的变量进行赋值时,程序将在JS全局对象中创建一个名称与该变量相同的属性,也即创建一个新的全局变量。这种做法会带来很多问题(比如,多个JS程序间产生全局变量污染等),给后期维护带来不小的麻烦;因此在实际开发过程中,应当尽量避免使用这种做法。
变量的储存
如果定义的变量为全局变量,同时在变量定义过程中没有使用var关键词,那么该变量会作为全局对象的属性而存在,可以通过访问this(全局对象)的相应属性而获得,也可以通过使用delete关键词将其从全局对象中删除掉:
vare="globalVariableValue";//definedoutsideofanyfunction,itisaglobalvariable,butdoesnotstorein"this" f="globalVariableValue2"; this.g="globalVariableValue3"; console.log(this.e);//undefined console.log(this.f);//globalVariableValue2 console.log(this.g);//globalVariableValue3
deletef; deleteg; console.log(this.f);//undefined console.log(this.g);//undefined