1.1 变量定义的方法
js是一种弱类型脚本语言,在使用变量之前,可以无需定义,想使用某个变量时直接使用。JavaScript支持两种方式老引入变量:、
A) 隐式定义:直接给变量赋值
B) 显示定义:使用var关键字定义
变量没有固定的数据类型,因此可以对同一个变量在不同的时间赋不同的值。JavaScript中的变量是区分大小写的!
1.2类型转换:
JavaScript支持自动类型转换,这种类型转换的功能非常强大,代码如下:
<script type="text/javascript">
var a = "3.145";
var b = a-2; //b = 1.145
var c = a+2; // c = 3,1452
alert(b+"\n"+c);
</script>
转换规律是:
1. 对于减号运算符,因为字符串不支持减号运算符,所以系统自动将字符串类型转换为数值类型
2. 对于加法运算符来说,因为字符串可用加号作为连接运算符,所以系统自动将数值转换为字符串类型,并将两个字符串进行连接运算。
JavaScript提供了一下几个函数来执行强制类型转换
toString():将布尔值,数值等转换为字符串
praseInt():将字符串,布尔值等转换为整型
praseFloat():将字符串,布尔值等转换为浮点型
<script type="text/javascript">
var a="3.145";
var b=a+2; //b=3.1452
var c=parseFloat(a)+2; //c=5.145
alert(b+"\n"+c);
</script>
1.3变量的作用域
在全局范围定义的变量(不管是否使用var)、不使用var定义的变量都是全局变量,全局变量可以被所有的脚本访问。在函数里定义的变量被称为局部变量,局部变量只有在函数内有效。
<script type="text/javascript">
var text = "全局变量";
function myFun(){
age = 20;
var isMale = true;
}
myFun();
alert(text + "\n" + age);
alert(isMale);
</script>
上面代码中使用var定义一个全局变量,后面又定义了一个变量(没有使用var)也是全局变量,但是必须等到定义该变量的函数执行之后才是全局变量。
<script type="text/javascript">
var text = "全局变量";
function checkScope(){
var text="局部变量";
alert(text);
}
checkScope();
alert(text);
</script>
上述代码首先会输出一个“局部变量”,代码中首先定义一个text的全局变量,其后在函数内定义了text的局部变量,函数中的局部变量覆盖了全局变量,接下来程序在函数外访问text变量,将会看到程序输出“全局变量”,局部变量失效,JavaScript中没有块范围,看如下代码:
<script type="text/javascript">
function text(o){
var i = 0;
if( typeof o == "object"){
var j = 5;
for( var k = 0; k < 10; k++ ){}
document.write(k);
}
alert(k + "\n" + j);
}
text(document);
</script>
1.4 变量提升
<script type="text/javascript">
var scope="全局变量";
function text(){
document.writeln(scope +"<br/>");
var scope ="局部变量";(1)
document.writeln(scope +"<br/>");
}
text();
</script>
此处需要理解的是JavaScript的变量提升机制。所谓的变量提升,指的是变量声明总是被解释器“提升”到函数体的顶部。这意味着上面程序中(1)代码定义了scope局部变量,但解释器会提升该变量,该变量的声明提升到函数体的顶部。
注意: 变量提升只是提升变量的声明部分,而不是提升变量的赋值部分。