13.1.1 运行JavaScript
前面已经介绍了JavaScript通常嵌在互联网页中执行,在HTML页面中嵌入执行JavaScript代码有两种方式。
使用javascript:前缀构建执行JavaScript代码的URL。
使用<script>元素来包含JavaScript代码。
代码示范:
//第一种方式
<a href="javascript:alert(‘运行JavaScript!‘);">运行 JavaScript<a/>
//第二种方式
<script type="text/javascript">
alert("直接运行的JavaScript!");
</script>
13.1.2 导入JavaScript文件
为了让HTML页面和JavaScript脚本更好的分离,我们可以将JavaScript脚本单独保存在一个*.js文件中。
代码示范:
<script src="test.js" type="text/javascript"></script>
上面语法中src属性指定JavaScript脚本文件所在的URL。使用脚本文件分离的方式和直接在该页面上写的脚本效果是一致的。
13.2 数据类型和变量
任何语言都离不开数据类型和变量。下面依次介绍JavaScript中数据类型和变量的基本语法
13.2.1 定义变量的方式
JavaScript是弱类型脚本语言,使用变量之前,可以无须定义,想使用某个变量时直接使用即可。归纳起来,
JavaScript支持两种方式来引入变量。
隐示定义:直接给变量赋值。
显示定义:使用var关键字定义变量。
代码示范:
//隐示方式定义变量a
a = "Hello JavaScript";
alert(a);
//显示方式定义变量a
var a = "Hello JavaScript";
alert(a);
隐示定义的方式简单、快捷、需要使用变量时,直接给变量赋值即可。
显示声明方式是采用var关键字声明变量,声明时变量可以没有初始值,声明的变量数据类型是不确定的。当第一次给变量
赋值是,变量的数据类型才确定下来,而且使用过程中变量的数据类型也可随意改变。
13.2.2 类型转换
JavaScript支持自动类型转换,这种类型转换的功能非常强大。
代码示范:
//定义字符串变量
var a = "3.145";
//让字符串变量和数值执行算术运算
var b = a-2;
//让字符串变量和数值执行加法运算
var c = a+2;
在上面代码中,a是值为3.145的字符串,让a和数值执行减法,则自动执行算数运算,并将a的类型转换为数值;
让a和数值执行加法,则a的值转换为字符串。这就是自动类型转换,它的转换规律是:
对于减号运算符,因为字符串不支持减法运算,所以系统自动将字符串转换成数值。
对于加号运算,因为字符串可用加号作为连接运算符,所以系统自动将数值转换各种类型
各种类型自动类型转换的结果如下表所示:
值 | 目标类型 | |||
字符串类型 | 数值型 | 布尔型 | 对象 | |
undefined | "undefined" | NaN | false | Error |
null | "null" | 0 | false | Error |
字符串 | 不变 | 数值或NaN | true | String对象 |
空字符串 | 不变 | 0 | false | String对象 |
0 | "0" | 0 | false | Number对象 |
NaN | "NaN" | NaN | false | Number对象 |
Infinity | "Infinity" | Infinity | true | Number对象 |
-Infinity | "-Infinity" | -Infinity | true | Number对象 |
数值 | 数值字符串 | 不变 | true | Number对象 |
true | "true" | 1 | 不变 | Boolean对象 |
false | "false" | 0 | 不变 | Boolean对象 |
对象 | "toString()返回值" | valueOf(),toString()或NaN | true | 不变 |
这种自动类型转换虽然方便,但程序可读性非常差,而且有时候我们就是希望让字符串和数值执行加法运算,这就需要使用强制类型转换了。
JavaScript提供了如下几个函数来执行强制类型转换。
toString():将布尔值、数值等转换成字符串。
parseInt():将字符串、布尔值等转换成整数。
parseFloat():将字符串、布尔值等转换成浮点数
13.2.3 变量
JavaScript是弱类型语言,同一个变量可以一会儿存储数值,一会儿存储字符串。变量还有个重要的概念:作用范围。
根据变量定义的范围不同,变量有全局变量和局部变量之分。直接定义的变量时全局变量,全局变量可以被所有的脚本
访问;在函数里定义的变量称为局部变量,局部变量只在函数内有效。如果全局变量和局部变量使用相同的变量名,则
局部变量将覆盖全局变量。
代码示范:
//定义全局变量test
var test = "全局变量";
//定义函数checkScope
function checkScope()
{
//定义局部变量
var test = "局部变量";
alert(test);
}
checkScope();
执行结果将会是"局部变量",代码中定义了名为test的全局变量,但在函数中又定义了名为test的局部变量,函数中
的局部变量覆盖了全局变量。与java、C语言不通的是,JavaScript的变量没有块范围。
代码示范:
function test(o)
{
if(typeof o == "object")
{
//定义变量j,变量j的作用范围是整个函数内,而不是if块内
var j = 5;
for(var k = 0; k<10;k++)
{
//因为JavaScript没有代码块范围
//所以k的作用范围是整个函数内,而不是循环体内
document.write(k);
}
}
//即使出了循环体,k的值依然存在
alert(k+"\n"+j);
}