1、第17章 JavaScriptJavaScript(爪哇脚本)是一种嵌入 HTML 文档中的基于对象的 Web 客户端脚本语言,用于创建在线应用程序,以产生交互式动态网页。JavaScript 的内容丰富,使用技巧也较多,但由于篇幅所限,本章只介绍一些JavaScript 的最基本内容。17.1 概述JavaScript 原来是 Netscape 公司发明的,后来被 Microsoft 仿造(JScript 和VBScript),现在成为了欧洲和国际标准。 JavaScript 是一种被嵌入到 HTML 文档内部,并由浏览器负责执行的解释性编程语言。JavaScript 可以在客户端完成多种任
2、务,减少了网络和服务器的负担,并支持分布式计算和处理。17.1.1 历史与标准下面先介绍 JavaScript 及其变种 JScript 的历史,然后介绍对应的欧洲和国际标准。 历史JavaScript 是由 Netscape 公司的 Brendan Eich 发明的,最初叫 Mocha 和LiveScript。1995 年 Java 出现后,引入了 Java 的部分设计理念,对 LiveScript 进行了改写,还增加了对 Java Applet 的支持,所以将其改名为 JavaScript,并于 1995 年 9 月 18日随 Navigator 2.0 正式版推出 JavaScript
3、1.0。Netscape 与 Mozilla 后来又陆续推出了JavaScript 的 1.11.8 版本,最新的 1.8.2 版于 2009 年 6 月 22 日推出,而 2.0 版目前还处在开发过程中。Microsoft 公司也于 1996 年 8 月随 IE 3.0 推出了与 JavaScript 1.0 兼容的 JScript,但在其后来的版本中又有它自己的若干扩充。JScript 的版本有 1.05.8,最新版 5.8 是 2009年 3 月随 IE 8.0 推出的。JScript .NET 是 JScript 在.NET 环境下的实现,已经发行的版本有 7.0(2002 年 1 月
4、5 日)、7.1(2003 年 4 月 1 日)和 8.0(2005 年 11 月 7 日)。最新版本是随.NET 框架2.0 发布的 JScript .NET 8.0,由于.NET 框架的 3.0、3.5 和 4.0 版都是建立在 2.0 版之上的,所以并没有随之推出 JScript .NET 的更新版本。 标准1996 年 11 月,网景公司与微软公司,分别将各自的脚本语言交给 ECMA(European Computer Manufacturers Association,欧洲计算机制造商联合会 )。ECMA 于 1997 年 6 月公布了 Web 脚本语言标准 ECMA-262(ECM
5、AScript Language Specification,ECMA 脚本语言规范) 的第 1 版,它主要基于 JavaScript 1.1。ECMA 又将该标准提交给国际标准化组织 ISO,经过少量修改后, 1998 年 4 月变成了国际标准:ISO/IEC 16262(Information technology - ECMAScript language specification,信息技术ECMA 脚本语言规范),2002 年 6 月 13 日又推出了 16262 的第二版:ISO/IEC 16262:2002。ECMA 于 1998 年 6月推出了与 16262 国际标准完全兼容的
6、第二版(2rd Edition):ECMA 262-2,1999 年 12月推出了与 JavaScript 1.5 对应的第三版(3rd Edition):ECMA 262-3,2009 年 12 月又推出 ECMA 262 的第 5 版 ECMA 262-5。IE 、Netscape 和 Firefox 的新版本都支持这些欧洲和国际标准。与 JavaScript 2.0 版对应的 ECMA 262 的第 4 版,由于目标太雄伟,原计划于 2008年 10 月推出,但一直难产,后来被彻底放弃。其部分内容纳入 ECMA 262 的第 5 版中,其他内容则被置入至今仍处于开发过程中的代号为 ECM
7、AScript Harmony(和谐)的新项目中。微软和雅虎等 ECMA 262 第 4 版的反对者们,自己成立了一个委员会,着手设计一个改变不太大的 3.1 版,它已经被 ECMA TC39 接受为 5.0 版的一个子集。随着 XML 的流行,ECMA 对 ECMAScript 进行了扩展,添加了对纯 XML 的支持,于 2004 年 6 月推出了标准 ECMA-357(ECMAScript for XML (E4X) Specification,针对XML 的 ECMA 脚本规范), 2005 年 12 月又推出了它的第 2 版。2006 年 2 月 13 日,ISO 发布了与 E4X 对
8、应的国际标准 ISO/IEC 22537:2006(Information technology - ECMAScript for XML (E4X) specification,信息技术针对 XML 的 ECMA 脚本)。17.1.2 特点嵌入 HTML 文档中的 JavaScript 源代码,实际上是作为网页的一部分而存在的。需要支持 JavaScript 的浏览器来对网页内容进行分析、识别、解释,并执行 JavaScript 脚本。JavaScript 为网页设计提供了极大的灵活性和控制手段,能将网页中的文本、图形、声音、动画等各种媒体形式捆绑成一个结合紧密的信息源。下面列出 JavaS
9、cript 的主要优缺点:1. 优点 在客户端完成动态交互和自动验证,减少了网络和服务器的负担(比较 CGI); 可方便地操纵各种浏览器对象,控制浏览器的外观、状态、甚至运行方式,可根据用户需要“定制”浏览器,使网页更加友好; 可在客户端完成多种任务,而不需要服务器的参与,从而可支持分布式计算和处理。第 17 章 JavaS 3 2. 缺点 各种浏览器对 JavaScript 的支持程度不一样,JavaScript 脚本的运行效果存在差异; 为了保证 Web 的安全性,JavaScript 牺牲了远程网页访问本地文件系统的功能。17.1.3 技术与使用下面先讨论 JavaScript 的技术特
10、点,然后介绍 JavaScript 的使用方法,最后给出一个 JavaScript 脚本的简单例子。1. 技术从技术上讲,JavaScript 是一种解释性编程语言,其源程序(脚本)由浏览器内置的 JavaScript 解释器,动态处理成可执行代码。JavaScript 脚本程序通常是事件(网页的某种状态或用户的某种操作和反馈)驱动的,每当浏览器探测到事件发生时,就会自动寻找对应的 JavaScript 函数来处理。与编译语言不同,JavaScript 采用了动态绑定机制:在开始的语法分析阶段,总是忽略对函数与实例名称之引用的有效性检查;而只是在实际执行时,JavaScript 解释器才去寻找
11、每个遇到的引用所对应的实际函数或对象实例的地址。这给 JavaScript 带来了很大的灵活性。JavaScript 函数需要在事件发生之前定义,对装卸文档时所调用的 JavaScript 函数,则必须在文档头中定义。定义 JavaScript 函数的方法为:function 函数名( 参数表) 语句序列 return 表达式; 2. 使用使用 JavaScript 的方法为:在 HTML 文档中支持内部事件属性组之元素的(开始)标签中,将函数作为事件响应属性的属性值来调用(注:即使没有输入参数,函数名后的圆括号也不能省略),即:事件响应属性= “函数名( 参数表)“ 。例如:3. 例子下面是
12、一个可以进行简单表达式计算的,含有 JavaScript 脚本的完整 HTML 文档例子。计算表达式 function compute(form)with (Math) form.result.value = eval(form.expr.value);简单表达式计算输入表达式:计算结果为:显示结果如图 17-1 所示。(a) 四则运算 (b) 函数调用图 17-1 计算表达式的 JavaScript 例子17.2 基础语法除了数字不分整数与实数、变量没有类型、定义函数需要关键字 function、新增了两个比较运算符和 for-in 循环语句等外,大多数 JavaScript 的基本语法都与
13、C/C+/Java/C# 的相似。如 JavaScript 也区分字母的大小写,并采用自由书写格式。17.2.1 数据类型、常量与变量1. 数据类型 数字:不分整数与实数; 逻辑:true 或 false(true1,false0); 字符串:“ 或 ; 未定义:undefined; 对象:包括内置对象、浏览器对象、服务器对象和自定义对象等。注意:无字符与指针等类型。2. 常量 数字(似 C/C+/Java/C#)第 17 章 JavaS 5 整数:十进制数,如 123;十六进制数,如 0xff 或 0XFF;八进制数,如0123; 实数:小数,如 3.14;科学表示法,如 1e10 或 1E
14、10。 非数字:NAN (Not A Number)。 布尔:true 、false(区分大小写,不能用 1、0 代替)。 串:“abcd“ 或 abcd,如 value=“red“。注意:JavaScript 中的串常量不能跨行,解决办法是反复使用“变量+=“子串“;”来将它们连接在一起。 转义字符(也似 C/C+/Java/C#):b(退格)、f(换页)、n(换行)、r(回车)、t(跳格)、(单引号)、“(双引号)等。3. 变量与需要先定义后使用、有严格类型限制、只有数字类型可以自动提升转换的C/C+/Java/ C# 变量不同,JavaScript 的变量不需要预先定义、也无类型限制、而
15、且在任意类型之间都可以互相转换(以表达式最左项的类型为准),但是必须先赋值后使用。变量说明语法:var 变量名=初值,;。其中: 关键字 var 可省(但在函数体内省略 var 后,可能表示引用的是已经在函数体外定义过的同名全局变量); 似 C/C+/Java/C#,变量名为字母或下划线开头的字母、数字、下划线串,长度不限,区分大小写,但不能与保留字同名; 结尾处的分号可用白空符代替; 没有被赋值的变量的值为 undefined 类型,直接使用则为语法错误; 可让变量=null(数字=0、串 =“)使其有定义。例子:var s = “7“, n = 2; / 用 var 定义变量并初始化,s
16、为字符串,n 为数字x = s + n / 无 var,无分号,结果 x 为串“72“y = n + s / 结果 y 为整数 9t = “ + n / 结果 t 为串“2“t = n.toString(10); / 结果 t 也为串“2“因为 JavaScript 是用于处理和生成 HTML 文档的,而 HTML 文档基于文本,全由字符串构成,所以在 JavaScript 中经常需要将数字转换为字符串,常用方法是:变量名 = “(空串)+ 数字变量 ; 或 变量名 = 数字变量.toString( 基数) ;在 JavaScript 中,变量可以分成全局变量(位于函数体外的变量)和局部变量(
17、在函数体内定义的变量)两类。例如:x = 3; / 全局变量 xfunction f( ) / 自定义函数var x = 4; / x 为局部变量,若省略 var 则 x 为全局变量。y = 2 * x + Math.PI; / 调用函数 f 之后,全局变量 x 仍然=3。/ 若在函数体中省略了变量 x 前的 var,则全局变量 x 的值变为 4。17.2.2 操作符与表达式JavaScript 的操作符与表达式都与 C/C+/Java/C# 的类似,但是也有若干不同之处。1. 操作符似 C,有代数(+ - * / % + -)、位( / 结果 x = “myname“x += “ is Jo
18、hn“; / 结果 x = “myname is John“ 在比较运算前,先进行自动类型转换,如:“3“ = 3(结果为 true)、“3“ != 3(结果为 false)、3 = “3.0“(结果为true) 解决办法新增加两个比较操作符: =(三个等号):只有在两边类型一致,且值也相等时,才为 true。 !=(一个感叹号两个等号):在类型不同、或类型相同但值不等时,都为true。 其他操作符: delete删除对象中的属性或数组中的元素。 typeof(表达式)返回表达式类型,可能的返回值有: “number“(数值类型)、“string“(串类型)、“boolean“(布尔类型)、“
19、object“(对象类型)、“function“(函数类型)和 “undefined“(未定义类型)。2. 表达式(似 C 等) 条件表达式:“(条件)? A : B ”,如 status = (age = 18) ? “adult“ : “minor“ 赋值表达式:“左值变量 赋值操作符 表达式;”,如 x = y+1; x=y=0;17.2.3 语句除了新增的 for-in 遍历语句、指定默认对象的 with 语句、函数定义和变量声明语句等少数不同外,大多数 JavaScript 的语句都与 C/C+/Java/C# 的类似。1. 注释语句:/ 单行注释、/* 多行注释 */(C+)2.
20、变量声明语句:var 变量名=初值,;3. 赋值语句:左值变量 赋值操作符 表达式;(C )第 17 章 JavaS 7 4. 条件语句:if-else(C)5. 分支语句:switch-case(break)(C)6. 循环语句:for、for-in 、while、do-while (break、continue)。与 C 语言的区别有: break 和 continue 后面可以带语句标号(Java); 新增 for-in 语句:for (变量 in 对象或数组) (C# 的 foreach)。7. 复合语句:语句序列8. 函数定义语句:function 函数名(参数表) 语句序列 ret
21、urn 表达式; 。与 C语言的区别有: 必须使用 function 关键字; 函数无返回值类型,由 return 语句中的表达式决定返回值类型,若没有执行return 语句,则返回 undefined 值。9. 对象操作语句:(大多C+/Java/C#) new构造对象实例,语法为:实例名 = new 对象名(参数); (注意:即使没有参数,括号也不能少,这点与 C+/Java/C# 不同); delete删除对象实例,语法为: delete 实例名; this当前对象(但不是指针); with指定默认对象( C+/Java/C# 无) 语法:with (对象名) 语句序列 说明:在其中的语
22、句序列中,可以省写对象名及句点,而直接使用默认对象的属性和方法。如:若对象为 Math,则 PI*cos(x)相当于Math.PI*Math.cos(x)。17.3 对象JavaScript 是一种基于对象而不是面向对象的编程语言:它可以操作浏览器、服务器和内置对象,也可以自定义对象;但是它不支持封装、继承和多态这三种面向对象语言的典型特征。17.3.1 基于对象JavaScript 并不是一种功能完整的面向对象(object-oriented)语言,它不支持封装、继承和多态,也没有类,而只是一种基于对象(object-based)的语言。但还是可以用JavaScript 来开发面向对象的程序
23、,如 JavaScript 可以操作浏览器、服务器及网页文档中的各种对象,也可以自己定义对象类型,并产生若干实例。作为脚本语言的 JavaScript,其目的只是提供对浏览器及服务器对象的灵活控制、从而快速方便地生成网页中的各种对象、并控制这些对象的行为,而不是一种完整的程序设计语言。对象包括数据和对数据的操作,在 JavaScript 中,称对象中的数据为属性(property,似 Java,但在 C+中叫数据成员或成员变量)、称操作数据的函数为方法(method ,似 Java 和 C#,但在 C+中叫成员函数)。只不过 JavaScript 中,属性和方法并没有封装在对象中,而只是被关联
24、在一起。17.3.2 对象分类在 JavaScript 中可以使用的对象有: 浏览器对象由浏览器根据网页内容自动提供的对象,如窗口(window)、框架(frame)、文档(document) 、表单(forms)等; 内置对象JavaScript 预定义的内部对象,如日期(Date)、数学(Math) 、串(String)、数组(Array) 等; 服务器对象服务器上固有的对象,即 LiveWire 对象框架,包括请求(request)、客户机(client)、项目(project)和服务器(server); 自定义对象用户按问题需要,自己定义的对象。17.3.3 自定义对象在 JavaSc
25、ript 中,用户可以根据具体需要,创建新的对象(自定义对象)。但与C+/Java/C#等面向对象的编程语言(先定义类,并在类中定义属性和方法)有所不同,用 JavaScript 创建自定义对象的步骤为:1. 定义对象要用的各种函数;2. 定义与对象同名的构造函数;3. 在构造函数内定义对象的属性,并将它们初始化:this.属性名 = 初值; ;4. 将已经定义好的函数在构造函数中注册为对象的方法:this.方法名 = 函数名; 。JavaScript 使用(自定义)对象的方法则与 C+等的一样,用语句: new 构造函数(参数);来创建该对象的实例。不过与 C+等不同的是,在 JavaScr
26、ipt 中,对没有输入参数的(缺省)构造函数,表示函数调用的圆括号也不能少。一般将自定义对象的脚本保存为扩展名为 js 的文件,在需要时用 HTML 的脚本元素的 src 属性来引用。如:。下面以表格对象 table 为例,说明创建和使用自定义对象的过程与步骤:(1) 定义若干(用作对象方法的)函数:function setTableCellValue(row, col, value) this.datarow * this.columns + col = value;第 17 章 JavaS 9 (2) 定义构造函数(定义对象的属性并注册对象的方法):function table(rows,
27、 columns) this.rows = rows; / 定义对象的属性,下同this.columms = columns; this.border = 0;this.data = new Array(rows*columns); this.header = new Array(colmns);this.setValue = setTableCellValue; / 将已定义的函数注册为对象的方法并将这些函数存为 table.js 文件。(3) 创建对象实例: t = new table(3, 4); t.border = 2; t.setValue(0, 0, “张三“); 17.3.4
28、内置对象内置对象为 JavaScript 预定义的一些常用核心对象,包括:Array、Boolean 、Date、Function 、java 、JavaArray、JavaClass、JavaObject、JavaPackage、Math 、netscape、Number、Object 、Packages、RegExp、String、sun。由于时间有限,下面只介绍 String(串)、Math(数学)、Date(日期)、Array(数组 )等四个对象,及一些JavaScript 的全局属性与方法。1. 串对象 String 创建实例对象:var 串对象变量名 = new String(“初
29、值串“);。一般可以简写为:变量名 = “初值串 “;。如: str = “value=“; 几乎等价于 var str = new String(“value=“); 常用属性:length(长度)串的字符数,如 str.length 为 6。 常用方法: charAt(pos):返回串中指定位置 pos 处的字符,pos = 0 length-1。 indexOf(searchValue, fromIndex):返回串 searchValue 在对象串中 从位置fromIndex 开始的第一次出现的位置,若没有找到则返回-1。 lastIndexOf(searchValue, fromIn
30、dex):返回串 searchValue 在对象串中从位置fromIndex 开始的最后一次出现的位置,若没有找到则返回-1。 substr(start, length):返回对象串中从位置 start 开始长度为 length的子串。 substring(indexA, indexB):返回对象串中从位置 indexA 到 indexB 的子串。 toLowerCase():将对象串中的字母全转换为小写。 toUpperCase():将对象串中的字母全转换为大写。如:str.toUpperCase(); 则str 变为“VALUE=“。 toString(radix):将数值转换为 radi
31、x 进制的数字串。如 n.toString(16). toUpperCase()将数值变量 n 转换为大写字母的 16 进制数字串。 外观格式方法(括号内为对应的 HTML 元素):big():大号(big)、blink():闪烁(blink)、bold() :粗体(b)、fixed():等宽(tt)、italics():斜体(i)、small():小号(small)、 strike():删除(strike)、sub() :下标(sub)、sup():上标(sup)。 链接方法: anchor(nameAttribute):设置锚名,似 HTML 中带 name 属性的 a 元素。 link(
32、hrefAttribute):设置链接,似 HTML 中带 href 属性的 a 元素。例子:(动态生成超链接)var linkText = “Yahoo!公司“, url = “http:/ Yahoo!公司的超链接!2. 数学对象 MathMath 为静态对象,可以直接用对象名调用,如 Math.PI * Math.sin(x),但不能被实例化。 属性(数学常量),见表17-1。 方法(数学函数),见表17-2。3. 日期时间对象 DateDate 为动态对象,只有在实例化后才能使用(静态方法除外)。时间的测量都是从 1970.1.1. 0:0:0UTC(Universal time co
33、ordinated,协调世界时)算起的毫秒数,Date 对象的取值范围为-10 8108 天(1 天=86,400,000 毫秒),相当于1970273,972 年。下面分类给出 Date 对象的一些常用方法。 构造方法: new Date():构造包含当前时间的对象。名称 属性 符号近似值圆周率 PI 3.14159欧拉常数 E e 2.718282 的自然对数值 LN2 ln2 0.6931510 的自然对数值 LN10 ln10 2.302582 的平方根 SQRT2 21.414212 的平方根的倒数 SQRT1_2 /0.70711正无穷大 POSITIVE_INFINITY 负无穷
34、大 NEGATIVE_INFINITY-表 17-1 Math 对象的属性(数学常量)第 17 章 JavaS 11 new Date(milliseconds):构造包含指定时间为milliseconds(从1970.1.1. 0:0:0 算起的毫秒数)的对象 new Date(dateString):构造包含指定时间为 dateString的对象。 dateString 的格式为:月份 日期, 年份 时 :分:秒;或(因特网 GMT 约定格式):星期, 日期 月份 年份 时:分:秒 GMT hhff 时区。其中,括号中的时间可省 (全设为 0),没有写 GMT(Greenwich Mean
35、 Time,格林尼治标准时间 = UTC)和时区的为当地时间。如:Aug 9, 1995、Dec 31, 2003 9:45 、Jan 4, 3004 8Mon, 25 Dec 1995 13:30:00 GMT+0430 new Date(yr_num, mo_num, day_num, hr_num, min_num, sec_num, ms_num):构造包含由指定时间为 yr_num 年 mo_num 月 day_num 日hr_num 时 min_num 分 sec_num 秒 ms_num 毫秒 的对象。如:testTime = new Date(2010, 10, 12, 20,
36、 30); / 2010 年 11 月 12 日 20 时30 分 静态方法:(可以不创建实例,直接用 Date 对象引用) Date.parse(dateString):将“年月日时分秒”格式的时间串 dateString 转换为(从 1970.1.1. 0:0:0 算起的)毫秒数。 Date.UTC(year, month, day, hrs, min, sec, ms):将指定时间转换为(从1970.1.1. 0:0:0 算起的)毫秒数。 获取方法: getFullYear():获得对象时间中的年份,如 2007、1884 。 getMonth():获得对象时间中的月份值-1,值范围:0
37、11 。 getDate():获得对象时间中的日期,值范围: 131。 getDay():获得对象时间中的星期值,值范围:06,对应于 SunSat。名称 函数 含义 名称 函数 含义正弦 sin(x) sinx 幂 pow(x,y) xy余弦 cos(x) cosx 开平 方 aqrt(x)正切 tan(x) tgx 上取整ceil(x) x 的最小整数反正弦asin(x) sin-1x 下取整floor(x) x 的最大整数反余弦acos(x) cos-1x 圆整 round(x) 四舍五入反正切atan(x) tg-1x 绝对值abs(x) |x|反正切atan2(y,x)tg-1(y/
38、x)随机数random(x) 0, 1指数 exp(x) ex 最小值min(x,y) x 与 y 中的小者对数 log(x) lnx 最大值max(x,y) x 与 y 中的大者表 17-2 Math 对象的方法(数学函数) getHours():获得对象时间中的时值,值范围:023。 getMinutes():获得对象时间中的分值,值范围:059。 getSeconds():获得对象时间中的秒值,值范围: 059。 getMilliseconds():获得对象时间中的毫秒值,值范围:0999。对应于获得 Date 对象中当地时间之完整年毫秒的方法 get*,都有对应的获得世界时之完整年毫秒
39、的方法 getUTC*,如 getUTCFullYear()、getUTCSeconds()等。 getTime():获得对象时间(从 1970.1.1. 0:0:0 算起的毫秒数)。 getTimezoneOffset():获得对象时间中以分钟计算的时区偏移值。 例子:Date Testnow = new Date(); / 获取当前时间exam = new Date(“Jun 15, 2012“);sm = new Date(“Aug 5, 2012“);msPerDay = 24 * 60 * 60 * 1000; / 一天的毫秒数examLeft = (exam.getTime() -
40、 now.getTime() / msPerDay;smLeft = (sm.getTime() - now.getTime() / msPerDay;document.write(“离考试还剩不到“ + Math.ceil(examLeft) + “天时间了!“);document.write(“离暑假还剩不到“ + Math.ceil(smLeft) + “天时间了!“); 设置方法: setYear(yearValue):yearValue 为相对于 1900 年的年数(已是被反对的,应该被 setFullYear 方法代替)。 setFullYear(yearValue, monthV
41、alue, dayValue)。 setMonth(monthValue, dayValue):monthValue=011,若11,则年+1 、月%12。 setDate(dayValue):dayValue=131。 setHours(hoursValue, minutesValue, secondsValue, msValue):hoursValue=023。 setMinutes(minutesValue, secondsValue, msValue):minutesValue=059。第 17 章 JavaS 13 setMilliseconds(millisecondsValue)
42、:millisecondsValue=0999。 setTime(timevalue):timevalue 为从 1970.1.1. 0:0:0 算起的毫秒数。与获取方法类似,对应于设置 Date 对象中当地时间之年 毫秒的方法 set*,都有对应的设置世界时之年毫秒的方法 setUTC*,如setUTCFullYear、setUTCSeconds 等。 转换方法: toString():将对象中的时间转换为对应的字符串,可以替代 Object.toString(),会被 JavaScript 解释器在需要将 Date 对象转换为字符串时自动调用。格式为:星期 月份 日期 时:分: 秒 UTC
43、hhff 时区 年份如:Sun Dec 24 12:43:51 UTC+0800 2006 toGMTString():将对象中的时间转换为因特网 GMT 约定格式的字符串:星期, 日期 月份 年份 时:分: 秒 UTC如:Sun, 24 Dec 2006 04:43:51 UTC toUTCString():将对象中的时间转换为世界时约定格式的字符串,格式同上。 toLocaleString():将对象中的时间转换为当地时间格式的字符串,具体格式依赖于使用的平台,如:2006 年 12 月 24 日 12:43:51 或:12/24/06 12:43:51 。 toLocaleDateStr
44、ing():返回将对象中的时间转换为当地时间格式后的日期字符串,具体格式依赖于使用的平台,如:2006 年 12 月 24 日 或:12/24/06。 toLocaleTimeString():返回将对象中的时间转换为当地时间格式后的时间字符串,具体格式依赖于使用的平台,如:12:43:51。4. 数组对象 Array长度可伸缩(但元素总数不超过 232 -1 = 4,294,967,295)的动态一维数组,索引从 0开始。同一数组的元素可为不同数据类型,数组元素本身也可以是另一个数组(多维数组)。 构造方法:new Array(arrayLength)、new Array(element0,
45、 element1, ., elementN)、element0, element1, ., elementN。例如:musicTypes = new Array(25);musicTypes0 = “R musicTypes1 = “Blues“; musicTypes2 = “Jazz“; musicTypes50 = “数来宝“; / 会自动加长数组到 51 个元素又如:days = new Array(“Sun“, “Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat“); 等价于:days = “Sun“, “Mon“, “Tue“, “Wed“, “Thu
46、“, “Fri“, “Sat“;因为 JavaScript 的变量可以是任意类型,所以数组的元素也可为不同数据类型,例如:myArray = new Array(“Hello“, myVar, 3.14159, true); 多维数组:利用数组型元素,可以构造多维数组。而且各维的大小和类型都可以互不相同。如:a = new Array(1, 2, new Array(“one“, “two“);则:a0 = 1、 a2= “one“, “two“、a21 = “two“。 例子:(英文数字时钟,显示结果如图 17-2,其中的时间域 time 中的内容会自动随时间而每秒动态改变)Digital
47、Clockfunction date() days = new Array(“Sun“, “Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat“);monthes = new Array(“Jan“, “Feb“, “Mar“, “Apr“, “May“, “Jun“,“Jul“, “Aug“, “Sep“, “Oct“, “Nov“, “Dec“);now = new Date();year = now.getFullYear();month = now.getMonth();date = now.getDate();day = now.getDay();dateS
48、tr = monthesmonth + “ “ + date + “, “ + year + “ (“ + daysday + “)“;document.clock.date.value = dateStr;function time() now = new Date();hours = now.getHours();minutes = now.getMinutes();seconds = now.getSeconds();timeStr = “ + hours;timeStr += (minutes 图 17-2 数字时钟(时间与数组例)第 17 章 JavaS 15 Date: Time: