搞定J2EE核心技术与企业应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二部分

第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语句:用于为语句添加标号。