第二部分
第4章 JavaScript技术详解
JavaScript在页面控制方面起着不可代替的作用,但它在编程方面的一些不好的习惯也饱受诟病,但自从Prototype推出以后,开发人员突然发现,原来JavaScript可以使用面向对象的方式编程,也可以促使开发人员养成良好的编程习惯。
本章首先对JavaScript的基础知识进行介绍,然后重点讲解JavaScript的函数、对象和事件处理机制,以及如何使用JavaScript来面向对象编程,最后着重讲解XMLHttpRequest对象,从而使读者真正理解JavaScript的强大功能。
4.1 JavaScript语言基础
Netscape公司首先引进了Sun公司有关Java的概念,将自己原有的LiveScript进行重新设计,并改名为JavaScript。随后其他的浏览器也支持了这种脚本语言,但支持的版本及某些语法可能有所改变,这也造成开发人员在编写JavaScript代码时要考虑支持多种版本的问题。
4.1.1 变量和数据类型
JavaScript中的变量命名与其他计算机编程语言非常相似,变量用来存放脚本中的值。JavaScript是一种对数据类型变量要求不太严格的语言,所以不必声明每一个变量的类型,但在使用变量之前先进行声明是一种好的习惯。JavaScript使用var语句来进行变量声明,区分大小写,变量名称的长度是任意的,但必须遵循以下规则:
● 第一个字符必须是一个字母、一个下画线(_)或一个美元符号($)。
● 其他的字符可以是字母、数字、下画线或美元符号,变量名称中不能有空格、+、-等其他符号。
● 变量名称不能是保留字,比如var、int、double、true等都不能作为变量的名称。
说明:JavaScript变量命名约定和Java类似,也就是说,对于变量名为一个单词的,则要求其为小写字母,例如amt;对于变量名由两个或两个以上单词组成的,则要求第二个和第二个以后的单词的首字母为大写,例如,decAmt。
JavaScript有6种数据类型,分别是Number、Boolean、String、Object、Null和Undefined。
● Number(数值):包括整数、浮点数及NaN(非数)值,整数可以为正数、零或者负数;浮点数可以包含小数点。
● Boolean(布尔):Boolean值有true和false,不能用1和0来表示。
● String(字符串):字符串用单引号或双引号来表示。
● Object(对象):包括数组类型Array、日期对象Date等。
● Null(空):如果为Null,就表示为空或不存在。
● Undefined(未定义):表示变量已经被创建,但未赋值。
下面分别介绍一下数值、布尔和字符串类型。
● 数值类型:JavaScript的整数可以使用八进制、十进制和十六进制来表示。八进制数的第一位必须是0,十六进制数的前两位必须是0X或0x。
● 布尔类型:JavaScript中只能用true或false表示其状态,而不能用1或0表示,但当布尔值用于数值表达式时,true和false将自动转换成1和0。
● 字符串类型:用来说明字符串的单引号或双引号必须是成对出现的,在JavaScript中也以反斜杠“\”开头定义了若干个不可显示的特殊字符。如果要在字符串中使用反斜杠,或者在单引号括起来的字符串中使用单引号,以及在双引号括起来的字符串中使用双引号,则都需要使用反斜杠作为转义符。JavaScript中的转义符如表4.1所示。
表4.1 JavaScript中的转义符
● 变量的作用域,在JavaScript中变量分为全局变量和局部变量。全局变量定义在所有函数体之外,其作用范围是整个脚本;而局部变量则定义在函数体之内,只对该函数可见,而对其他函数是不可见的。
说明:如果一个全局变量和一个局部变量同名,那么在该局部范围内的变量引用是指局部变量,而局部变量范围以外的变量引用则是指全局变量。如果事先没有定义就使用一个变量,那么JavaScript将把该变量作为全局变量。
4.1.2 运算符和表达式
运算符是完成操作的一系列符号,使用运算符的值称为算子或操作数。在JavaScript中包括以下7种运算符:
● 算术运算符。
● 逻辑运算符。
● 字符串运算符。
● 比较运算符。
● 条件运算符。
● 赋值运算符。
● 位操作运算符。
在上述7种运算符中,只有条件运算符是三目运算符,其他的都是双目运算符或单目运算符,下面分别进行介绍。
(1)算术运算符:JavaScript中的算术运算符主要有7种,如表4.2所示。
表4.2 JavaScript中的算术运算符
(2)逻辑运算符:JavaScript中的逻辑运算符主要有3种,如表4.3所示。
表4.3 JavaScript中的逻辑运算符
(3)字符串运算符:JavaScript中的字符串运算符主要有1种,如表4.4所示。
表4.4 JavaScript中的字符串运算符
(4)比较运算符:JavaScript中的比较运算符主要有8种,如表4.5所示。
表4.5 JavaScript中的比较运算符
(5)条件运算符:JavaScript中的条件运算符主要有1种,如表4.6所示。
表4.6 JavaScript中的条件运算符
(6)赋值运算符:JavaScript中的赋值运算符主要有12种,如表4.7所示。
表4.7 JavaScript中的赋值运算符
(7)位操作运算符:JavaScript中的位操作运算符主要有7种,如表4.8所示。
表4.8 JavaScript中的位操作运算符
上述运算符都有一定的优先级,如表4.9所示。
表4.9 JavaScript中运算符的优先级
说明:优先级一样的运算符,按照从左向右的顺序执行。
4.1.3 程序控制语句
程序控制语句使得程序能够按照一定的方式执行,程序的逻辑都是通过程序控制语句来实现的,下面是JavaScript常用的程序控制语句。
(1)if条件语句:
if(表述式) 语句段; …
代码说明:
● 若表达式为真,则执行语句段。
● 如果要执行的语句段有多条语句,则要用花括号将语句括起来。多条语句可以写在一行,以分号“;”分隔,也可以写成多行。为了美观,建议写成多行。
当表达式为假时,要执行另外的语句,则需要使用if…else语句,如下所示:
if(表述式) 语句段1; ... else 语句段2; …
代码说明:
● 若表达式为true,则执行语句段1;否则执行语句段2。
● 若语句段有多行,则必须使用花括号将其括起来。
● 语句段还可以是if语句,从而实现if语句的嵌套,但建议嵌套一般不超过3层。
(2)switch语句:通过if语句可以实现对多个表达式进行判断,从而选择要执行的语句。但这里有另外一种更好的对多个表达式语句进行判断的写法,那就是通过switch语句,示例代码如下:
switch(表达式){ case value1; 语句段1; Break; case value2; 语句段2; Break; ... default: 语句段n; }
代码说明:
如果表达式的值等于value1,则执行语句段1,然后跳出该switch语句;如果表达式的值等于value2,则执行语句段2,然后跳出该switch语句;如果都不相等,则执行default后面的语句段n。
(3)for循环语句:用于在某个条件下重复执行一段代码。示例代码如下:
for(初始化;条件;增量){ 循环语句; }
代码说明:
● 初始化参数告诉循环前必须初始化变量。
● 如果条件为真,则执行语句,否则跳出循环体。
● 增量主要定义循环控制变量在每次循环时按什么方式变化。
● 初始化、条件、增量这3个语句之间,必须使用分号分隔。
● for语句可以实现循环嵌套,但建议一般嵌套不超过3层。
(4)while循环语句:是另外一种循环语句的表示方式,该语句没有初始化变量和增量。示例代码如下:
while(条件){ 循环语句; }
代码说明:
● 当条件为真时,重复循环,否则退出循环。
● 首先判断条件如果为假,则直接跳出循环,不执行循环语句。
(5)do…while语句:while语句的变体,示例代码如下:
do { 循环语句; } while(表达式)
代码说明:
先执行一次循环语句,然后判断表达式的值,如果为真,则继续执行循环语句;如果为假,则跳出循环。
(6)break和continue语句:使用break语句可以跳出循环语句,使用continue语句可以跳过循环内剩余的语句而进入下一次循环。
(7)label语句:用于为语句添加标号。