一.定义变量的方式
JavaScript是弱类型脚本语言,使用变量之前,可以无须定义,直接用即可。
1)隐式定义:直接给变量赋值
<script type="text/javascript">
//隐式定义变量 a
a="Hello World"
//使用警告语句输出a的值
alert(a);
</script>
2)显实定义:使用var关键字定义变量。声明时变量可以没有初始值,声明的变量数据类型是不确定的。当第一次给变量赋值时,变量数据类型才 确定下来,而且使用过程中变量的数据类型也可以随意改变。
<script type="text/javascript">
//显示定义变量a
var a;
//给变量a赋值,赋值后a的数据类型为布尔型
a=true;
//使用警告语句输出a的值
alert(a);
</script>
注意:JavaScript中的变量区分大小写。
JavaScript允许一次声明多个变量,可以在定义变量时为变量指定初始值
//定义变量i,j,k,其中j,k指定初始值
var i,j=0,k=0;
二.类型转换
JavaScript支持自动类型转换,这种类型转换
<script type="text/javascript">
//定义字符串变量
var a = "3.145";
//让字符串变量和数值执行算术运算
var b = a - 2;
//让字符串变量和数值执行加法运算
var c = a + 2;
//输出b和c的值
alert(b + "\n" + c);
</script>
对于减法运算符,因为字符串不支持减法运算,所以系统自动将字符串转换为数值。
对于加法运算符,因为字符串可用加法符号作为连接运算符,所以系统自动将数值转换成字符串,并将两个字符串连接。
这种自动类型转换虽然方便,但是程序的可读性非常差,而且有时候我们希望让字符串和数值执行加法运算,这就需要使用强类型转换了。
1)toString() :将布尔、数值等转换成在字符串
2)parseInt() :将字符串、布尔等转换成整数
3)parseFloat() :将字符串、布尔等转换成浮点数
<script type="text/javascript">
//定义字符串变量
var a = "3.145";
//让字符串变量和数值执行算术运算
var b = a - 2;
//让字符串变量和数值执行加法运算
var c = parseFloat(a) + 2;
//输出b和c的值
alert(b + "\n" + c);
</script>
当使用parseInt()或parseFloat()将各种类型转换成数值类型时:
字符串值是一个数值字符串的可以直接转换成数值,否则将转换成NaN
undefined,null,布尔,及其他对象,一律转换成NaN
<script type="text/javascript">
//定义数值变量
var a = 3.145;
//数值变量强转换成字符串,并与数值做加法运算
var b = toString(a) + 2;
//输出b的值
alert(b);
</script>
注意:当使用ToString()函数将各种类型的值像字符按串转换时,结果全部是object。
三. 变量
根据变量定义的范围不同,变量有全局变量和局部变量之分。函数外部定义的都是全局变量,函数内部通过var定义的为局部变量,隐式定义的为全局变量(这种全局变量需要函数被运行一次才能被定义)。如果局部变量与全局变量使用相同的变量名,则局部变量将覆盖全局变量。
<script type="text/javascript">
//定义全局变量test
var test = "全局变量";
//定义函数 checkScope
function checkScope() {
//定义局部变量
var test = "局部变量";
//输出局部变量
alert(test);
}
checkScope();
</script>
注意:与Java、c等语言不同,javaScript的变量没有块范围
<script type="text/javascript">
function test(o) {
//定义变量i,变量i的作用范围是整个函数
var i = 0;
if (typeof o == "object") {
//定义变量j,变量j的作用范围是整个函数内,而不是if块内
var j = 5;
for (var k = 0; k < 10; k++) {
//因为javascript没有代码块范围
//所以k的作用范围是整个函数内,而不是循环内
document.write(k)
}
}
alert(k + "\n" + j);
}
test(document);
</script>
<script type="text/javascript">
//定义全局变量
var scope = "全局变量";
function test() {
//全局变量被局部变量覆盖
//而此时scope局部变量尚未赋值,故此处输出undifined
document.write(scope);
//定义局部变量,其作用域为整个函数
var scope = "局部变量";
//再次输出scope
document.write(scope);
}
test();
</script>
输出:
注意:定义变量用var和不用var的区别
如果使用var定义变量,那么程序会强制定义一个新变量
如果没使用var定义变量,那么系统会优先在当前上下文中搜索是否存在该变量,只有在改变量不存在的情况下,系统才会重新定义一个新变量。