JavaScript.docx
- 文档编号:7180817
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:30
- 大小:225.79KB
JavaScript.docx
《JavaScript.docx》由会员分享,可在线阅读,更多相关《JavaScript.docx(30页珍藏版)》请在冰豆网上搜索。
JavaScript
第17章JavaScript
JavaScript(爪哇脚本)是一种嵌入HTML文档中的基于对象的Web客户端脚本语言,用于创建在线应用程序,以产生交互式动态网页。
JavaScript的内容丰富,使用技巧也较多,但由于篇幅所限,本章只介绍一些JavaScript的最基本内容。
17.1概述
JavaScript原来是Netscape公司发明的,后来被Microsoft仿造(JScript和VBScript),现在成为了欧洲和国际标准。
JavaScript是一种被嵌入到HTML文档内部,并由浏览器负责执行的解释性编程语言。
JavaScript可以在客户端完成多种任务,减少了网络和服务器的负担,并支持分布式计算和处理。
17.1.1历史与标准
下面先介绍JavaScript及其变种JScript的历史,然后介绍对应的欧洲和国际标准。
●历史
JavaScript是由Netscape公司的BrendanEich发明的,最初叫Mocha和LiveScript。
1995年Java出现后,引入了Java的部分设计理念,对LiveScript进行了改写,还增加了对JavaApplet的支持,所以将其改名为JavaScript,并于1995年9月18日随Navigator2.0正式版推出JavaScript1.0。
Netscape与Mozilla后来又陆续推出了JavaScript的1.1~1.8版本,最新的1.8版于2008年6月推出,而2.0版目前还处在开发过程中。
Microsoft公司也于1996年8月随IE3.0推出了与JavaScript1.0兼容的JScript,但在其后来的版本中又有它自己的若干扩充。
JScript的版本有1.0~5.7,最新版5.7是2006年11月随IE7.0推出的。
JScript.NET是JScript在.NET环境下的实现,已经发行的版本有7.0、7.1和8.0。
最新版本是随.NET框架2.0发布的JScript.NET8.0,由于.NET框架的3.0和3.5版是建立在2.0版之上的,所以并没有随之推出JScript.NET的更新版本。
●标准
1996年11月,网景公司与微软公司,分别将各自的脚本语言交给ECMA(EuropeanComputerManufacturersAssociation,欧洲计算机制造商联合会)。
ECMA于1997年6月公布了Web脚本语言标准ECMA-262(ECMAScriptLanguageSpecification,ECMA脚本语言规范)的第1版,它主要基于JavaScript1.1。
ECMA又将该标准提交给国际标准化组织ISO,经过少量修改后,1998年4月变成了国际标准:
ISO/IEC16262(Informationtechnology-ECMAScriptlanguagespecification,信息技术——ECMA脚本语言规范)。
ECMA于1998年6月推出了与16262国际标准完全兼容的第二版(2rdEdition):
ECMA262-2,1999年12月又推出了与JavaScript1.5对应的第三版(3rdEdition):
ECMA262-3。
ISO于2002年6月13日又推出了16262的第二版:
ISO/IEC16262:
2002。
IE、Netscape和Firefox的新版本都支持这些欧洲和国际标准。
与JavaScript2.0版对应的ECMA262的第4版,由于目标太雄伟,原计划于今年10月推出,但一直难产,至今仍处于开发过程中。
微软和雅虎等第4版的反对者们,自己成立了一个委员会,着手设计一个改变不太大的3.1版。
现在它已经被ECMATC39接受为4.0版的一个子集。
而且ECMATC39也宣布,ECMAScript4.0将被改变更适度的代号为ECMAScriptHarmony的新项目所代替。
随着XML的流行,ECMA对ECMAScript进行了扩展,添加了对纯XML的支持,于2004年6月推出了标准ECMA-357(ECMAScriptforXML(E4X)Specification,针对XML的ECMA脚本规范),2005年12月又推出了它的第2版。
2006年2月13日,ISO发布了与E4X对应的国际标准ISO/IEC22537:
2006(Informationtechnology--ECMAScriptforXML(E4X)specification,信息技术——针对XML的ECMA脚本)。
17.1.2特点
嵌入HTML文档中的JavaScript源代码,实际上是作为网页的一部分而存在的。
需要支持JavaScript的浏览器来对网页内容进行分析、识别、解释,并执行JavaScript脚本。
JavaScript为网页设计提供了极大的灵活性和控制手段,能将网页中的文本、图形、声音、动画等各种媒体形式捆绑成一个结合紧密的信息源。
下面列出JavaScript的主要优缺点:
1.优点
●在客户端完成动态交互和自动验证,减少了网络和服务器的负担(比较CGI);
●可方便地操纵各种浏览器对象,控制浏览器的外观、状态、甚至运行方式,可根据用户需要“定制”浏览器,使网页更加友好;
●可在客户端完成多种任务,而不需要服务器的参与,从而可支持分布式计算和处理。
2.缺点
●各种浏览器对JavaScript的支持程度不一样,JavaScript脚本的运行效果存在差异;
●为了保证Web的安全性,JavaScript牺牲了远程网页访问本地文件系统的功能。
17.1.3技术与使用
下面先讨论JavaScript的技术特点,然后介绍JavaScript的使用方法,最后给出一个JavaScript脚本的简单例子。
1.技术
从技术上讲,JavaScript是一种解释性编程语言,其源程序(脚本)由浏览器内置的JavaScript解释器,动态处理成可执行代码。
JavaScript脚本程序通常是事件(网页的某种状态或用户的某种操作和反馈)驱动的,每当浏览器探测到事件发生时,就会自动寻找对应的JavaScript函数来处理。
与编译语言不同,JavaScript采用了动态绑定机制:
在开始的语法分析阶段,总是忽略对函数与实例名称之引用的有效性检查;而只是在实际执行时,JavaScript解释器才去寻找每个遇到的引用所对应的实际函数或对象实例的地址。
这给JavaScript带来了很大的灵活性。
JavaScript函数需要在事件发生之前定义,对装卸文档时所调用的JavaScript函数,则必须在文档头中定义。
定义JavaScript函数的方法为:
function函数名([参数表]){语句序列return表达式;}……
2.使用
使用JavaScript的方法为:
在HTML文档中支持内部事件属性组之元素的(开始)标签中,将函数作为事件响应属性的属性值来调用(注:
即使没有输入参数,函数名后的圆括号也不能省略),即:
事件响应属性="函数名([参数表])"。
例如:
3.例子
下面是一个可以进行简单表达式计算的,含有JavaScript脚本的完整HTML文档例子。
functioncompute(form){
with(Math)form.result.value=eval(form.expr.value);
}
显示结果如图17-1所示。
(a)四则运算(b)函数调用
图17-1计算表达式的JavaScript例子
17.2基础语法
除了数字不分整数与实数、变量没有类型、定义函数需要关键字function、新增了两个比较运算符和for-in循环语句等外,大多数JavaScript的基本语法都与C/C++/Java/C#的相似。
如JavaScript也区分字母的大小写,并采用自由书写格式。
17.2.1数据类型、常量与变量
1.数据类型
●数字:
不分整数与实数;
●逻辑:
true或false(true≠1,false≠0);
●字符串:
"…"或'…';
●未定义:
undefined;
●对象:
包括内置对象、浏览器对象、服务器对象和自定义对象等。
注意:
无字符与指针等类型。
2.常量
●数字(似C/C++/Java/C#)
⏹整数:
十进制数,如123;十六进制数,如0xff或0XFF;八进制数,如0123;
⏹实数:
小数,如3.14;科学表示法,如1e10或1E10。
●非数字:
NAN(NotANumber)。
●布尔:
true、false(区分大小写,不能用1、0代替)。
●串:
"abcd"或'abcd',如'value="red"'。
注意:
JavaScript中的串常量不能跨行,解决办法是反复使用“变量+="子串";”来将它们连接在一起。
●转义字符(也似C/C++/Java/C#):
\b(退格)、\f(换页)、\n(换行)、\r(回车)、\t(跳格)、\’(单引号)、\"(双引号)等。
3.变量
与需要先定义后使用、有严格类型限制、只有数字类型可以自动提升转换的C/C++/Java/C#变量不同,JavaScript的变量不需要预先定义、也无类型限制、而且在任意类型之间都可以互相转换(以表达式最左项的类型为准),但是必须先赋值后使用。
变量说明语法:
var变量名[=初值][,…];。
其中:
●关键字var可省(但在函数体内省略var后,可能表示引用的是已经在函数体外定义过的同名全局变量);
●似C/C++/Java/C#,变量名为字母或下划线开头的字母、数字、下划线串,长度不限,区分大小写,但不能与保留字同名;
●结尾处的分号可用白空符代替;
●没有被赋值的变量的值为undefined类型,直接使用则为语法错误;
●可让变量=null(数字=0、串="")使其有定义。
例子:
vars="7",n=2;//用var定义变量并初始化,s为字符串,n为数字
x=s+n//无var,无分号,结果x为串"72"
y=n+s//结果y为整数9
t=""+n//结果t为串"2"
t=n.toString(10);//结果t也为串"2"
因为JavaScript是用于处理和生成HTML文档的,而HTML文档基于文本,全由字符串构成,所以在JavaScript中经常需要将数字转换为字符串,常用方法是:
变量名=""(空串)+数字变量;或变量名=数字变量.toString(基数);
在JavaScript中,变量可以分成全局变量(位于函数体外的变量)和局部变量(在函数体内定义的变量)两类。
例如:
x=3;//全局变量x
functionf(){//自定义函数
varx=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="my"+"name";//结果x="myname"
x+="isJohn";//结果x="mynameisJohn"
●在比较运算前,先进行自动类型转换,如:
"3"==3(结果为true)、"3"!
=3(结果为false)、3=="3.0"(结果为true)
●解决办法——新增加两个比较操作符:
⏹===(三个等号):
只有在两边类型一致,且值也相等时,才为true。
⏹!
==(一个感叹号两个等号):
在类型不同、或类型相同但值不等时,都为true。
●其他操作符:
⏹delete——删除对象中的属性或数组中的元素。
⏹typeof(表达式)——返回表达式类型,可能的返回值有:
"number"(数值类型)、"string"(串类型)、"boolean"(布尔类型)、"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.变量声明语句:
var变量名[=初值][,…];
3.赋值语句:
左值变量赋值操作符表达式;(~C)
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函数名([参数表]){语句序列return表达式;}。
与C语言的区别有:
●必须使用function关键字;
●函数无返回值类型,由return语句中的表达式决定返回值类型,若没有执行return语句,则返回undefined值。
9.对象操作语句:
(大多~C++/Java/C#)
●new——构造对象实例,语法为:
实例名=new对象名(参数…);(注意:
即使没有参数,括号也不能少,这点与C++/Java/C#不同);
●delete——删除对象实例,语法为:
delete实例名;
●this——当前对象(但不是指针);
●with——指定默认对象(C++/Java/C#无)
⏹语法:
with(对象名){语句序列}
⏹说明:
在其中的语句序列中,可以省写对象名及句点,而直接使用默认对象的属性和方法。
如:
若对象为Math,则PI*cos(x)相当于Math.PI*Math.cos(x)。
17.3对象
JavaScript是一种基于对象而不是面向对象的编程语言:
它可以操作浏览器、服务器和内置对象,也可以自定义对象;但是它不支持类、继承和封装这三种面向对象语言的典型特征。
17.3.1基于对象
JavaScript并不是一种功能完整的面向对象(object-oriented)语言,它不支持类、继承和封装,而只是一种基于对象(object-based)的语言。
但还是可以用JavaScript来开发面向对象的程序,如JavaScript可以操作浏览器、服务器及网页文档中的各种对象,也可以自己定义对象类型,并产生若干实例。
作为脚本语言的JavaScript,其目的只是提供对浏览器及服务器对象的灵活控制、从而快速方便地生成网页中的各种对象、并控制这些对象的行为,而不是一种完整的程序设计语言。
对象包括数据和对数据的操作,在JavaScript中,称对象中的数据为属性(property,似Java,但在C++中叫数据成员或成员变量)、称操作数据的函数为方法(method,似Java和C#,但在C++中叫成员函数)。
只不过JavaScript中,属性和方法并没有封装在对象中,而只是被关联在一起。
17.3.2对象分类
在JavaScript中可以使用的对象有:
●浏览器对象——由浏览器根据网页内容自动提供的对象,如窗口(window)、框架(frame)、文档(document)、表单(forms)等;
●内置对象——JavaScript预定义的内部对象,如日期(Date)、数学(Math)、串(String)、数组(Array)等;
●服务器对象——服务器上固有的对象,即LiveWire对象框架,包括请求(request)、客户机(client)、项目(project)和服务器(server);
●自定义对象——用户按问题需要,自己定义的对象。
17.3.3自定义对象
在JavaScript中,用户可以根据具体需要,创建新的对象(自定义对象)。
但与C++/Java/C#等面向对象的编程语言(先定义类,并在类中定义属性和方法)有所不同,用JavaScript创建自定义对象的步骤为:
1.定义对象要用的各种函数;
2.定义与对象同名的构造函数;
3.在构造函数内定义对象的属性,并将它们初始化:
this.属性名=初值;;
4.将已经定义好的函数在构造函数中注册为对象的方法:
this.方法名=函数名;。
JavaScript使用(自定义)对象的方法则与C++等的一样,用语句:
new构造函数([参数]);来创建该对象的实例。
不过与C++等不同的是,在JavaScript中,对没有输入参数的(缺省)构造函数,表示函数调用的圆括号也不能少。
一般将自定义对象的脚本保存为扩展名为js的文件,在需要时用HTML的脚本元素的src属性来引用。
如:
下面以表格对象table为例,说明创建和使用自定义对象的过程与步骤:
(1)定义若干(用作对象方法的)函数:
functionsetTableCellValue(row,col,value){
this.data[row*this.columns+col]=value;
}
……
(2)定义构造函数(定义对象的属性并注册对象的方法):
functiontable(rows,columns){
this.rows=rows;//定义对象的属性,下同
this.columms=columns;this.border=0;
this.data=newArray(rows*columns);this.header=newArray(colmns);
this.setValue=setTableCellValue;//将已定义的函数注册为对象的方法
……
}
并将这些函数存为table.js文件。
(3)创建对象实例:
……t=newtable(3,4);t.border=2;t.setValue(0,0,"张三");……
17.3.4内置对象
内置对象为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串对象变量名=newString("初值串");。
一般可以简写为:
变量名="初值串";。
如:
str="value=";几乎等价于varstr=newString("value=");
●常用属性:
length(长度)——串的字符数,如str.length为6。
●常用方法:
⏹charAt(pos):
返回串中指定位置pos处的字符,pos=0~length-1。
⏹indexOf(searchValue[,fromIndex]):
返回串searchValue在对象串中[从位置fromIndex开始]的第一次出现的位置,若没有找到则返回-1。
⏹lastIndexOf(searchValue[,fromIndex]):
返回串searchValue在对象串中[从位置fromIndex开始]的最后一次出现的位置,若没有找到则返回-1。
⏹substr(start[,length]):
返回对象串中从位置start开始[长度为length]的子串。
⏹substring(indexA,indexB):
返回对象串中从位置indexA到indexB的子串。
⏹toLowerCase():
将对象串中的字母全转换为小写。
⏹toUpperCase():
将对象串中的字母全转换为大写。
如:
str.toUpperCase();则str变为"VALUE="。
⏹toString(radix):
将数值转换为radix进制的数字串。
如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元素。
⏹
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaScript
![提示](https://static.bdocx.com/images/bang_tan.gif)