本书目录
第一章: JavaScript语言基础
第二章: JavaScript内置对象第三章: 窗口window对象
第四章: 文档document对象
第五章: 表单form对象
第六章: History与Navigator对象
第七章: JavaScript框架编程
第八章: JavaScript异常处理
第九章: 自定义JavaScript对象
第一章 JavaScript语言基础
什么是JavaScript
JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语
言。
JavaScript的出现弥补了HTML语言的不足,它是Java与HTML折中的选择,具有以下几个基
本特点。
1、脚本编写
JavaScript是一种脚本语言,它采用小程序段的方式实现编程。它作为一种解释性语言,不需要
进行编译,而是在程序运行过程中逐行地被解释。
2、基于对象
JavaScript是一种基于对象的语言,这意味着它能运用自己已经创建的对象。因此,许多功能可
能来自于JavaScript运行环境(即浏览器本身)中对象的方法与JavaScript的对象相互作用。
3、简单性
JavaScript的简单性首先主要体现在它基于Java的基本语句和控制流,是一种简单而紧凑的
语言,对于学习Java是一种非常好的过度;其次,它的变量类型是采用“弱类型”,并未使用严格
的数据类型。
4、安全性
JavaScript是一种安全性语言,它不允许访问本地的硬盘,而且不能将数据存入到服务器上;
不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互,从而有效地防止数据
的丢失。
5、动态性
JavaScript是动态的,它可以直接对用户或客户输入做出响应而无需经过Web服务程序。它对
用户的响应是采用以事件驱动的方式进行的。所谓事件驱动,就是指在页面中执行某种操作所产生的动
作,比如按下鼠标、移动窗口或选择菜单等都可以视为事件,当事件发生后就会引起相应的事件响应。
6、跨平台性
JavaScript仅依赖于浏览器本身,与操作系统无关,只要是能运行浏览器的计算机,并支持
JavaScript的浏览器就可以正确执行。从而实现“编写一下,走遍天下” 的梦想。
Java和Javascript的区别
1、基于对象和面向对象
Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。
JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是
一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非
常丰富的内部对象供设计人员使用。
2、解释和编译
两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过
编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立
于某个特定的平台编译代码的束缚。
JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文
本格式的字符代码发送给客户编由浏览器解释执行。
3、强变量和弱变量
两种语言所采取的变量是不一样的。
Java采用强类型变量检查,即所有变量在编译之前必须作声明。
JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检
查其数据类型,
4、代码格式不一样
Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节
代码的形式保存在独立的文档中。
JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写
HTML文档就像编辑文本文件一样方便。
5、嵌入方式不一样
在HTML文档中,两种编程语言的标识不同,JavaScript使用<Script>...</Script>来标
识,而Java使用<applet>...</applet>来标识,或采用java脚本语言。
6、静态联编和动态联编
Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。
JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查,如不经编译则就
无法实现对象引用的检查。
第一节 语言基础
编写JavaScript程序
1、JavaScript直接嵌入HTML文件中
写在head或body标记对之间,要加标记如下:
<script language="javascript">
document.write("<font color=blue>Hello World!</font>");
</script>
2、JavaScript程序存放在单独的.js文件中,再在HTML文件中链接
<head>
<script language="javascript" SRC="xxx.js"></script>
</head>
<body>
<form>
<input type=button οnclick=show()>
</form>
</body>
在.js文件中直接书写javascript代码即可。
function show(){
document.write("hello world!");
}
基本数据类型
在JavaScript中有四种基本的数据类型:
数值型(整数和实数)
字符串型(用""号或''号括起来的字符或数值)
布尔型(使用true或false表示)
空值(null)
变量
在程序执行过程中值可变的量,是系统内存中的一个命名的存储单元。
变量的命名:
变量名以字母开头,中间可以出现数字,下划线。变量名不能有空格、+或其他符号
不能使用JavaScript的关键字作为变量。如:var、int、double、delete
变量名第一个单词全部小写,第二个单词开始每个单词的首字母大写,其余字母小写。
声明(定义)变量:
var x, myString;
var y=100, st="hello";
cost=23.6;
JavaScript中的保留字(关键字):
abstract boolean break byte case catch
char class const continue default do
double else extends false final finally
float for function goto if implements
import in instanceof int interface long
native new null package private protected
public return short static super switch
synchronized this throw throws transient true
try var void while with
变量的作用域
在JavaScript中有全局变量和局部变量之分。全局变量时定义在所有函数体之外,其作用范围
是所有函数;而局部变量时定义在函数体之内,只对该函数是可见的。
<script language="javascript">
var quanju=100;
function get(){
var i=10;
if(true){
var j=1;
}
}
</script>
常量
在程序执行过程中其值不可改变的量。
1、整型常量
如:123 ,512
2、实型常量
实型常量是由整数部分加小数部分表示,如3.14,12.43等,也可以使用科学或标准方法表示,
如5E7,4e5等。
3、布尔值
布尔常量只有两种取值true 或false。主要用来说明或代表一种状态或标志,用以控制操作流
程
4、字符型常量
字符型常量是指使用单引号(')括起来的字符或双引号(")括起来的字符串。例如,字符'a',
字符串 "hello"。
JavaScript也支持以反斜杠(\)开头的不可显示的特殊字符,通常称为控制字符。例如换行符
('\r')、制表符('\t')等
5、空值
JavaScript中有一个空值null,表示什么也没有。如试图引用没有定义的变量,就会返回一个
null值。
运算符
运算符是完成某种操作的符号。
算术运算符:+, -, *, /, %, ++, --
比较运算符:= =, >, >=, <, <=, !=
逻辑运算符:&&, ||, !
赋值运算符:=, +=, -=, *=, /=,
表达式
x=100;
str="你好";
t=null;
表达式通常是由变量、常量和函数通过运算符构成的有意义的算式。
如:a, a*2/3, (x+y)*10+(z-3)*20, x==y
第二节 控制结构
1、if 语句
if (表达式){
语句块;
}
x=80;
if (x>=60){
document.write( "恭喜你,及格了!");
}
if (表达式){
语句块1 ;
}else{
语句块2 ;
}
if (x>=0){
y=x;
}else{
y=-x;
}
2、switch语句
switch(表达式) {
case 值1:语句1; break;
case 值2:语句2; break;
case 值3:语句3; break;
default: 语句4;
}
<script language="javascript">
function getWeek(week){
switch(week){
case 0:
st="星期日";
break;
case 1:
st="星期一";
break;
case 2:
st="星期二";
break;
case 3:
st="星期三";
break;
case 4:
st="星期四";
break;
case 5:
st="星期五";
break;
case 6:
st="星期六";
break;
default:
st="错误";
}
return st;
}
</script>
3、for 语句
for (初值表达式; 条件表达式; 更新语句) {
//循环体语句
}
4、While语句
while(条件表达式) {
//循环体语句
}
break语句:结束当前的循环或switch语句。
continue语句:用于for或while语句中,结束本次循环,继续下一次循环。
第三节 函数
函数是一个设定名字的一系列JavaScript语句的有效组合。
函数可以带参数,也可以不带,可以有返回值,也可以没有
1、函数的定义
function 函数名([参数列表]) {
语句块;
[return 表达式;]
}
<script language="javascript">
//例:返回两个参数中较大的。
function max(a,b){
var x;
if (a>b)
x=a;
else
x=b;
return x;
}
</script>
2、调用函数
函数被调用时函数内的代码才真正被执行。
调用函数的方法就是使用函数的名称并赋给全部参数相应的值。
<script language="javascript">
max(20,30);
</script>
或
<input type="button" onClick="max(23,45);">
在JavaScript中调用函数时,可以向函数传递比在函数定义时参数数目要少的参数。在这种情
况下,只要不是试图去读那些没有传递过来的参数就行。
用typeof运算符可以得到参数的类型。对于未传递的参数,用typeof运算符得到的结果是
“undefined”。示例如下:
<script language="javascript">
function get(a,b){
document.write("参数a的数据类型是:"+typeof(a)+"<br>");
document.write("参数b的数据类型是:"+typeof(b));
}
get(32.4);
</script>
另外,JavaScript也可以向函数传递比在函数定义时参数数目要多的参数,为了读取这样的参
数,可以使用arguments数组。传递给函数的第一个参数是arguments数组的第一个元素,我们可
以用“函数名称.arguments[0]”来进行引用。示例如下:
<script language="javascript">
function getSum(){
var sum=0;
var number=getSum.arguments.length;//使用函数的参数数组
for(var i=0;i<number;i++){
sum+=getSum.arguments[i];
}
return sum;
}
document.write("23+54+65="+getSum(23,54,65));
</script>
第四节 JavaScript系统函数
JavaScript中的系统函数又称为内部方法,它们不属于任何对象,可以直接使用。它们可以完成许
多很常用的功能。
1、 eval( 字符串表达式)
返回字符串表达式中的运算结果值。
例:test=eval("x=8+9+5/2");
document.write(test); //输出显示19.5
2、 escape(字符串)
返回字符串的一种简单编码,将非字母数字的符号转换为%加其unicode码的十六进制表示。
例如: escape("Hello there") 返回 "Hello%20there"
3、unescape(字符串)
将已编码的字符串还原为纯字符串。
4、parseFloat(字符串)
返回浮点数
5、parseInt(字符串,radix)
其中radix是数的进制,默认是十进制数 parseInt(字符串)
第五节 事件驱动及事件处理
在JavaScript中编写的函数,通常是在其他代码进行调用时才会执行。不过我们也可以将某个
函数与某个事件(Event,通常是鼠标或热键的动作)联系起来,使得当事件发生时执行该函数。这个
方法称之为事件驱动(Event Driver)。而对事件进行处理的函数,称之为事件处理程序(Event
Handler事件句柄)。
1、事件
JavaScript事件驱动中的事件是通过鼠标或热键的动作(点击或按下)引发的。下表中列出了
常见的事件及其说明。
FF: Firefox, N: Netscape, IE: Internet Explorer
属性说明FF N IE
onabort 图像加载被中断1 3 4
onblur 元素失去焦点1 2 3
onchange 用户改变域的内容1 2 3
onclick 鼠标点击某个对象1 2 3
ondblclick 鼠标双击某个对象1 4 4
onerror 当加载文档或图像时发生某个错误1 3 4
onfocus 元素获得焦点1 2 3
onkeydown 某个键盘的键被按下1 4 3
onkeypress 某个键盘的键被按下或按住1 4 3
onkeyup 某个键盘的键被松开1 4 3
onload 某个页面或图像被完成加载1 2 3
onmousedown 某个鼠标按键被按下1 4 4
onmousemove 鼠标被移动1 6 3
onmouseout 鼠标从某元素移开1 4 4
onmouseover 鼠标被移到某元素之上1 2 3
onmouseup 某个鼠标按键被松开1 4 4
onreset 重置按钮被点击1 3 4
onresize 窗口或框架被调整尺寸1 4 4
onselect 文本被选定1 2 3
onsubmit 提交按钮被点击1 2 3
onunload 用户退出页面1 2 3
2、事件与函数的关联
要将一个函数与某个HTML元素的事件关联起来,需要设置相应的HTML标记中的属性值。例如,
对于一个button元素的click事件的处理函数为MyProc(),则可以用如下的形式将事件与函数关
联起来:
<script language="javascript">
function myPorc(){
alert(document.all("txt").value);
}
</script>
<input type="text" name="txt" />
<input type="button" value="Try" onClick="myPorc( );"/>
另一个示例,实现翻转图的效果,原来在网页上显示一幅图片,当用户把鼠标移到该图像上时,自
动将图像切换成新的一幅图片;当用户把鼠标移开时,最初的图像又被恢复回来。
<script language="javascript">
//处理mouseover事件
function imgover(){
document.myForm.img1.src="color.jpg";
}
//处理mouseout事件
function imgout(){
document.myForm.img1.src="gray.jpg";
}
</script>
<form name="myForm">
<img border=0 name="img1" src="gray.jpg"
οnmοuseοver="imgover();"
οnmοuseοut="imgout()">
</form>
课后练习题:
1、计算1加到100的和
2、使用while语句计算1加到100的和
3、打印100以内的偶数序列 :02468。。。
4、循环1-100,单数次输出“好好学习!”,偶数次输出“天天向上!”
5、在死循环中用if和break实现连续打印20个*就结束循环。
6、编程查找满足下列条件的三个正整数:x+y+z=50并且x+2*y+5*z=100
7、编写函数输出下面的图案
*
**
***
****
最多的星数目为函数参数n所决定。
8、将a,b,c三个整数按它们数值的大小,从小到大的顺序打印显示。
(练习if else语句)
9、编写函数输出下面的图案
*
**
***
****
***
**
*
行数为函数的参数n决定。
10、编写函数寻找水仙花数。
(三位数各位数字的立方和恰巧是该数本身,100到999之间有四个这样的数)。
第二章 JavaScript内置对象
对象概述
JavaScript是一种基于对象的脚本语句,而不是面向对象的编程语言。
对象就是客观世界存在的实体,具有属性和方法两方面特性。
访问对象的属性和方法的方式如下:
对象名.属性
对象名.方法名()
第一节 数组对象类型 Array
数组可以存放很多相同类型的数据。有数组名代表所有这些数据,而用
数组名[下标]表示其中某个元素(下标从0开始)。
如:var myA=["张三","李四","王五"];
document.write(myA); //看到所有三个字符串
myA[0]指向第一个元素
myA[2]指向第三个元素
1、建立数组的三种方法:
(1) 使用方括号,创建数组的同时赋初值
var myA=["张三", "李四","王五"];
var b=[10,20,30,40];
(2) 使用new 操作符,创建数组的同时赋初值
var myA=new Array("张三", "李四","王五");
注意圆括号和方括号的区别,不能任意使用。
(3) 先创建长度为10的数组,内容后面再赋值
var anArray = new Array(9);
anArray[0]= "张三";
anArray[1]= "李四";
anArray[2]= "王五";
2、数组的属性
length
数组名.length 返回数组中元素的个数
如:myA.length 为 3
例:使用for语句输出myA数组的各个元素。
for(i=0;i<myA.length;i++){
alert(myA[i]);
}
3、数组的方法
join(分割符)
该方法的功能是把数组中所有数据用指定的分割符连接起来,以一个字符串的形式表达出来。
例如:
myA.join("/") 返回一个字符串 "张三/李四/王五"
reverse()
该方法的功能是将数组中的元素整个反转顺序。
例如:
myA.reverse( ) 数组变为 ["王五","李四","张三"]
sort()
该方法的功能是将数组元素排序(汉字按拼音的字母顺序)。
例如:
myA.sort () 数组变为 ["李四","王五","张三"]
concat()
方法用于连接两个或多个数组。
下面的例子将把 concat() 中的参数连接到数组 a 中
<script type="text/javascript">
var a = [1,2,3];
document.write(a.concat(4,5));
//输出结果是:
//1,2,3,4,5
</script>
下面的例子创建了两个数组,然后使用 concat() 把它们连接起来
<script type="text/javascript">
var arr = ["George","John","Thomas"];
var arr2 = ["James","Adrew","Martin"];
document.write(arr.concat(arr2));
//输出结果是:
//George,John,Thomas,James,Adrew,Martin
</script>
下面的例子创建了三个数组,然后使用 concat() 把它们连接起来
<script type="text/javascript">
var arr = ["George","John","Thomas"];
var arr2 = ["James","Adrew","Martin"];
var arr3 = ["William","Franklin"];
document.write(arr.concat(arr2,arr3));
//输出结果是:
//George,John,Thomas,James,Adrew,Martin,William,Franklin
</script>
pop()
方法用于删除并返回数组的最后一个元素。
删除数组的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,
则 pop() 不改变数组,并返回 undefined 值。
<script type="text/javascript">
var arr = ["George","John","Thomas"];
document.write(arr);
document.write("<br />");
document.write(arr.pop());
document.write("<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas
//Thomas
//George,John
</script>
push()
方法可向数组的末尾添加一个或多个元素,并返回新的长度。
语法:arrayObject.push(newelement1,newelement2,....,newelementX)
push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而
不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
<script type="text/javascript">
var arr = ["George","John","Thomas"];
document.write(arr + "<br />");
document.write(arr.push("James") + "<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas
//4
//George,John,Thomas,James
</script>
shift()
方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。请注意,该方
法不创建新数组,而是直接修改原有的 arrayObject。
<script type="text/javascript">
var arr = ["George","John","Thomas"];
document.write(arr + "<br />");
document.write(arr.shift() + "<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas
//George
//John,Thomas
</script>
unshift()
方法可向数组的开头添加一个或更多元素,并返回新的长度。
unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到
较高的下标处,以便留出空间。该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,
它将成为新的元素 1,以此类推。
请注意,unshift() 方法不创建新的创建,而是直接修改原有的数组。
<script type="text/javascript">
var arr = ["George","John","Thomas"];
document.write(arr + "<br />");
document.write(arr.unshift("William") + "<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas
//4
//William,George,John,Thomas
</script>
slice(start,end)
从已有的数组中返回选定的元素。
<script type="text/javascript">
var arr = ["George","John","Thomas"];
document.write(arr + "<br />");
document.write(arr.slice(1) + "<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas
//John,Thomas
//George,John,Thomas
</script>
<script type="text/javascript">
var arr =["George","John","Thomas","James","Adrew","Martin"];
document.write(arr + "<br />");
document.write(arr.slice(2,4) + "<br />");
document.write(arr);
//输出结果是:
//George,John,Thomas,James,Adrew,Martin
//Thomas,James
//George,John,Thomas,James,Adrew,Martin
</script>
splice()
方法用于插入、删除或替换数组的元素。
语法:arrayObject.splice(index,howmany,element1,.....,elementX)
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多
个值来替换那些被删除的元素。
参数描述
index
必需。规定从何处添加/删除元素。
该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。
elementX 可选。可向数组添加若干元素。
下面的实例中,创建一个新数组,并向其添加一个元素:
<script type="text/javascript">
var arr =["George","John","Thomas","James","Adrew","Martin"];
document.write(arr + "<br />");
arr.splice(2,0,"William");
document.write(arr + "<br />");
//输出结果是:
//George,John,Thomas,James,Adrew,Martin
//George,John,William,Thomas,James,Adrew,Martin
</script>
下面的实例中,将删除位于 index 2 的元素,并添加一个新元素来替代被删除的元素:
<script type="text/javascript">
var arr =["George","John","Thomas","James","Adrew","Martin"];
document.write(arr + "<br />");
arr.splice(2,1,"William");
document.write(arr);
//输出结果是:
//George,John,Thomas,James,Adrew,Martin
//George,John,William,James,Adrew,Martin
</script>
下面的实例中,将删除从 index 2 ("Thomas") 开始的三个元素,并添加一个新元素
("William") 来替代被删除的元素:
<script type="text/javascript">
var arr =["George","John","Thomas","James","Adrew","Martin"];
document.write(arr + "<br />");
arr.splice(2,3,"William");
document.write(arr);
//输出结果是:
//George,John,Thomas,James,Adrew,Martin
//George,John,William,Martin
</script>
4、内部数组
在网页对象中,有很多本身就是数组对象。例如:document对象的forms属性就是一个数组对
象,其中每个元素对应网页中的一个表单,示例如下:
<form name="firstForm"></form>
<form name="secondForm"></form>
<form name="thirdForm"></form>
<script language="javascript">
var fs=document.forms;
for(i=0;i<fs.length;i++){
alert(fs[i].name);
}
</script>
表单中的一个选择列表的options属性也是一个数组对象,其中每个元素对应于列表中的一个
选择项目
<form name="myForm">
<select multiple size="5" name="box" style="width:150" onClick="f(this);">
<option value="apple">苹果</option>
<option value="orange">橘子</option>
<option value="banana">香蕉</option>
</select>
</form>
<script language="javascript">
function f(o){
for(i=0;i<o.options.length;i++){
alert(o.options[i].value+","+o.options[i].text);
}
}
</script>
第二节 字符串对象类型 String
myStr="我们来自五湖四海!";
或
myStr= new String("我们来自五湖四海!");
1、字符串的长度属性
myStr.length 返回字符串中字符的个数9,一个汉字算一个字符。
2、字符串的方法
分为两大类,如下:
(1) 格式设置方法:
big(), bold(), fontcolor(颜色字符串), fontsize(字体号), sub(), sup()
(2) 通用字符串操作。
str="Hello";
方法描述示例及结果
anchor() 创建 HTML 锚。str.anchor("b"):<A NAME=”b”>Hello</A>
big() 用大号字体显示字符串。str.big() : <BIG>Hello</BIG>
blink() 显示闪动字符串。str.blink() : <BLINK>Hello</BLINK>
bold() 使用粗体显示字符串。str.bold() : <B>Hello</B>
charAt() 返回在指定位置的字符。"北京欢迎你".charAt(2)结果是"欢"
"北京欢迎你".charAt(0)结果是"北"
charCodeAt() 返回在指定的位置的字符的
Unicode 编码。
"北京欢迎你".charCodeAt(2)结果是27426
concat() 连接字符串。"北京".concat("欢迎你")结果是"北京欢迎你"
fixed() 以打字机文本显示字符串。str.fixed() : <FIXED>Hello</FIXED>
fontcolor() 使用指定的颜色来显示字符串。str. Fontcolor ("Red") :
<FONT color="red">Hello</FONT>
fontsize() 使用指定的尺寸来显示字符串。str. fontsize () : <FONT
size="3">Hello</FONT>
indexOf() 检索字符串。"北京欢迎你".indexOf("欢迎")结果是2
"北京欢迎你".indexOf("上海")结果是-1
"北京欢迎你,欢迎".indexOf("欢迎")结果是2
italics() 使用斜体显示字符串。str. italics () : <I>Hello</I>
lastIndexOf() 从后向前搜索字符串。"北京欢迎你,欢迎".lastIndexOf("欢迎")结果是6
link() 将字符串显示为链接。str.link("http://www.javakc.com") :
<a href="http://www.javakc.com"> Hello
</a>
match() 找到一个或多个正则表达式的匹配。
replace() 替换与正则表达式匹配的子串。
search() 检索与正则表达式相匹配的值。
slice() 提取字符串的片断,并在新的字符
串中返回被提取的部分。
"北京欢迎你".slice(2,4) 结果是"欢迎"
small() 使用小字号来显示字符串。str.small():<SMALL>Hello</SMALL>
split() 把字符串分割为字符串数组。"北京|欢迎你|欢迎".split("|")结果是
数组{"北京","欢迎你","欢迎"}
strike() 使用删除线来显示字符串。str.strike():<strike>Hello </strike>
sub() 把字符串显示为下标。
str.sub( ) : <sub> Hello </sub>
substr() 从起始索引号提取字符串中指定数
目的字符。
"北京欢迎你".substr(1,2) 结果是"京欢"
substring() 提取字符串中两个指定的索引号之
间的字符。
"北京欢迎你".substring(2,4)结果是"欢迎"
sup() 把字符串显示为上标。str.sup():<sub> Hello </sub>1
toLowerCase() 把字符串转换为小写。
(不改变旧的字符串)
"Welcome to BeiJing".toLowerCase()结果
是
welcome to beijing
toUpperCase() 把字符串转换为大写。
(不改变旧的字符串)
"Welcome to BeiJing".toUpperCase()结果
是WELCOME TO BEIJING
第三节 数学类 Math
包含了常用的数学常量和函数。不需要创建该类型的对象,而可以直接使用Math.属性名或
Math.方法名来使用这些常量和方法。
Math.E 返回2.718
Math.PI 返回3.14159
Math 对象方法
方法描述
abs(x) 返回数的绝对值。
acos(x) 返回数的反余弦值。
asin(x) 返回数的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
toSource() 返回该对象的源代码。
valueOf() 返回 Math 对象的原始值。
第四节 日期时间类 Date
该类型对象中存放年月日时分秒等信息。
1、创建日期对象的几种办法:
new Date() 不带参数,则以系统时间为新创建日期对象的内容。
new Date(毫秒数) 以距1970年1月1日零时到期望时间的毫秒数为参数,创建日期对象
new Date(2005,6,3,21,0,22) 设定2005年7月3日,注意月从0开始的
new Date("July 3, 2005 21:00:22") 以指定的时间为新创建日期对象的内容
2、日期对象的方法:
getDate() 返回几号
getDay() 返回星期几 (0代表星期日,1到6代表星期一到星期六)
getHours() 返回几点
getMinutes() 返回分钟数
getSeconds() 返回秒数
getTime() 返回距1970年1月1日零时到期望时间的毫秒数
getYear() 返回年份
setDate() 设置几号
setDay() 设置星期几 (0代表星期日,1到6代表星期一到星期六)
setHours() 设置几点
setMinutes() 设置分钟数
setSeconds() 设置秒数
setTime() 以距1970年1月1日零时到期望时间的毫秒数为参数,设置时间
setYear() 设置年份
课后练习题:
1、倒序输出一个字符串的每个字符。
2、显示姓“李”和姓“王”的同学名单。
3、显示姓名中含“宁”的名单。
4、编写随机点名程序。
5、产生50个100以内的随机数,找出其中最大值和最小值,并统计大于等于60的有多少个。
6、编写倒计时程序(距明年春节的天数)。
第三章 窗口window对象
在JavaScript中可以使用window和self标志符来引用当前的浏览器窗口。
每个打开的窗口定义一个window对象,如果文档包含框架(frame 或 iframe 标签),浏览
器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。
可以使用top标识符引用最上层的窗口,或使用parent标志符引用当前窗口的父窗口。
第一节 Window 对象属性
属性描述
closed 返回窗口是否已被关闭。
defaultStatus 设置或返回窗口状态栏中的默认文本。
document 对 Document 对象的只读引用。请参阅 Document 对象。
history 对 History 对象的只读引用。请参数 History 对象。
innerheight 返回窗口的文档显示区的高度。
innerwidth 返回窗口的文档显示区的宽度。
length 设置或返回窗口中的框架数量。
location 用于窗口或框架的 Location 对象。请参阅 Location 对象。
name 设置或返回窗口的名称。
Navigator 对 Navigator 对象的只读引用。请参数 Navigator 对象。
opener 返回对创建此窗口的窗口的引用。
outerheight 返回窗口的外部高度。
outerwidth 返回窗口的外部宽度。
pageXOffset 设置或返回当前页面相对于窗口显示区左上角的 X 位置。
pageYOffset 设置或返回当前页面相对于窗口显示区左上角的 Y 位置。
parent 返回父窗口。
Screen 对 Screen 对象的只读引用。请参数 Screen 对象。
self 返回对当前窗口的引用。等价于 Window 属性。
status 设置窗口状态栏的文本。
top 返回最顶层的先辈窗口。
window window 属性等价于 self 属性,它包含了对窗口自身的引用。
· screenLeft
· screenTop
· screenX
· screenY
只读整数。声明了窗口的左上角在屏幕上的的 x 坐标和 y 坐标。IE、Safari 和
Opera 支持 screenLeft 和 screenTop,而 Firefox 和 Safari 支持
screenX 和 screenY。
第二节 Window 对象方法
方法描述
alert() 显示带有一段消息和一个确认按钮的警告框。
blur() 把键盘焦点从顶层窗口移开。
clearInterval() 取消由 setInterval() 设置的 timeout。
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
close() 关闭浏览器窗口。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。
createPopup() 创建一个 pop-up 窗口。
focus() 把键盘焦点给予一个窗口。
moveBy() 可相对窗口的当前坐标把它移动指定的像素。
moveTo() 把窗口的左上角移动到一个指定的坐标。
open() 打开一个新的浏览器窗口或查找一个已命名的窗口。
print() 打印当前窗口的内容。
prompt() 显示可提示用户输入的对话框。
resizeBy() 按照指定的像素调整窗口的大小。
resizeTo() 把窗口的大小调整到指定的宽度和高度。
scrollBy() 按照指定的像素值来滚动内容。
scrollTo() 把内容滚动到指定的坐标。
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
setTimeout() 在指定的毫秒数后调用函数或计算表达式。
第三节 常用方法示例
(1)打开和关闭窗口:
open 打开另外一个窗口来显示新的页面。
window.open(URL,窗口名称,可选参数)
close() 关闭用Open方法打开的窗口
可选参数:“toolbar=yes, width=500,height=200”
(2)对话框方法
alert (提示字符串) 提示信息,只有一个“确定”按钮
confirm (提示字符串) 选择确定或取消,返回值:true, false
<html>
<head>
<script type="text/javascript">
function disp_confirm(){
var r=confirm("请点击一个按钮");
if (r==true){
document.write("您点击了确认!");
}else{
document.write("您点击了取消!");
}
}
</script>
</head>
<body>
<input type="button" οnclick="disp_confirm()" value="显示一个确认框" />
</body>
</html>
prompt(提示字符串,初始值) 让用户在对话框中输入
<html>
<head>
<script type="text/javascript">
function disp_prompt(){
var name=prompt("请输入您的名字","Bill Gates");
if (name!=null && name!=""){
document.write("你好," + name + "!今天过得好吗?");
}
}
</script>
</head>
<body>
<input type="button" οnclick="disp_prompt()" value="显示一个提示框" />
</body>
</html>
(3)移动窗口方法:
(窗口左上角为坐标0,0点)
moveBy 窗口横向纵向移动多少象素 moveBy(10,10)
<html>
<head>
<script type="text/javascript">
function moveWin(){
myWindow.moveBy(50,50);
myWindow.focus();
}
</script>
</head>
<body>
<script type="text/javascript">
myWindow=window.open('','','width=200,height=100');
myWindow.document.write("This is 'myWindow'");
</script>
<input type="button" value="Move 'myWindow'" οnclick="moveWin()" />
</body>
</html>
moveTo 窗口移动到参数指定的位置 moveTo(100,100)
<html>
<head>
<script type="text/javascript">
function moveWin(){
myWindow.moveTo(0,0);
myWindow.focus();
}
</script>
</head>
<body>
<script type="text/javascript">
myWindow=window.open('','','width=200,height=100');
myWindow.document.write("This is 'myWindow'");
</script>
<input type="button" value="Move 'myWindow'" οnclick="moveWin()" />
</body>
</html>
(4)定时方法:
设置定时器,按指定时间间隔,反复执行某函数:
setInterval 和 clearInterval (见跑马灯程序)
<html>
<body>
<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50);
function clock(){
var t=new Date();
document.getElementById("clock").value=t;
}
</script>
<button οnclick="int=window.clearInterval(int)">
Stop interval
</button>
</body>
</html>
设置定时器,按指定时间间隔,执行一遍某函数:
setTimeout 和 clearTimeout
<html>
<head>
<script type="text/javascript">
function timedMsg(){
var t=setTimeout("alert('5 seconds!')",5000);
}
</script>
</head>
<body>
<form>
<input type="button" value="显示计时的消息框!"
onClick = "timedMsg()">
</form>
<p>点击上面的按钮。5 秒后会显示一个消息框。</p>
</body>
</html>
(5)聚焦方法 :
让窗口处于激活状态。
window.focus()
<html>
<body>
<script type="text/javascript">
myWindow=window.open('','','width=200,height=100');
myWindow.document.write("This is 'myWindow'");
myWindow.focus();
</script>
</body>
</html>
第四章 文档document对象
DOM (文档对象模型)
window 整个浏览器窗口的统称,是最上层的唯一对象。这一级可以省略,是系统默认值。
document 是Window的一个子对象,包含当前文档(HTML文件)中所有的对象。
form 即表单,包含许多子对象。
window、document和history对象是系统定义好的,其它对象是由我们程序员自己定义的。
我们要为每个对象起一个名称。
第一节 document对象概述
document对象最强大的一个特性在于它的组织性。如果给页面中的元素起个名字,则可以把该元
素当成document 对象的一个属性来处理。例如,如果在form 元素“form1”中有一个名叫
“ txtbox” 的文本框, 则可以像下面这样去引用该文本框中的文本:
document.form1.txtbox.value。
除了将HTML元素按名字组织起来外,document对象还有许多属性、方法、事件,这些特点可以
帮助我们扩展程序的功能。
Document 对象集合
集合描述
all[] 提供对文档中所有 HTML 元素的访问。
anchors[] 返回对文档中所有 Anchor 对象的引用。
applets 返回对文档中所有 Applet 对象的引用。
forms[] 返回对文档中所有 Form 对象引用。
images[] 返回对文档中所有 Image 对象引用。
links[] 返回对文档中所有 Area 和 Link 对象引用。
Document 对象属性
属性描述
body
提供对 <body> 元素的直接访问。
对于定义了框架集的文档,该属性引用最外层的 <frameset>。
cookie 设置或返回与当前文档有关的所有 cookie。
domain 返回当前文档的域名。
lastModified 返回文档被最后修改的日期和时间。
referrer 返回载入当前文档的文档的 URL。
title 返回当前文档的标题。
URL 返回当前文档的 URL。
Document 对象方法
方法描述
close() 关闭用 document.open() 方法打开的输出流,并显示选定的数据。
getElementById() 返回对拥有指定 id 的第一个对象的引用。
getElementsByName() 返回带有指定名称的对象集合。
getElementsByTagName() 返回带有指定标签名的对象集合。
open() 打开一个流,以收集来自任何 document.write() 或
document.writeln() 方法的输出。
write() 向文档写 HTML 表达式 或 JavaScript 代码。
writeln() 等同于 write() 方法,不同的是在每个表达式之后写一个换行符。
第二节 document对象的事件(body标记中)
onkeydown 按下任意键
onkeypress 将按下任意键
onkeyup 释放键
onclick 单击鼠标
ondblclick 双击鼠标
onmousedown 按下鼠标
onmouseup 释放鼠标
load 文档装载完毕
unload 文档卸载完毕
可以使用attachEvent方法,为body添加事件。
document.attachEvent ('onclick',getA);
第五章 表单form对象
第一节 表单对象的使用
1、什么是表单对象
表单(<form>)是Web页面中的基本元素。表单对象最主要的功能就是能够直接访问页面中的表
单。利用表单对象,可以实现与用户的交互;不需要服务器的介入,就可以实现动态改变Web页面的
行为。
对于Web页面表单,通常使用document对象的forms数组可以很方便地访问不同的表单。例如,
某HTML文件片段如下:
<form name="form1">
<input type="text">
<input type="text">
<input type="text">
</form>
<form name="form2">
<input type="text">
<input type="text">
</form>
document对象的forms数组有两个元素:forms[0]可以访问第一个表单,其中共有三个基本
元素:而forms[1]对应表单form2,其中只有两个元素。
除了用forms数组方式访问表单对象外,也可以直接用表单的名字进行访问。例如,对于上例,
也可以用document.form1和document.form2分别访问两个表单。
2、表单对象的方法
表单对象的submit()方法用于实现表单信息的提交。例如,要提交页面中的一个名为form1
的表单,可以使用下列语句:
document.form1.submit();
3、表单对象的属性
属性描述
Name 表单的名称
action 提交表单后执行的程序
target
指定数据显示在哪个窗口(_blank,_parent,_self,_top)
或哪个框架(框架名称)中
encoding 默认为text/html
method “Get”或“Post”
elements
数组
只读,表单中所有对象的索引,0,1,…
由document.表单名.elements.length可知该表单共有多少个对象
这里elements属性是一个数组,其中的元素对应于页面上表单内的各个控件。除了elements
外,表单的其他几个属性均对应于HTML语法中<form>标记的属性。
4、表单对象使用示例
下面示例如果使用表单对象,效果及代码如下:
<script type="text/javascript">
function display(){
var str;
// 使用表单名称访问表单对象的属性
str="name="+document.form1.name+"\r";
str=str+"action="+document.form1.action+"\r";
str=str+"method="+document.form1.method+"\r";
//访问表单对象的elements数组
str=str+"elements:"+"\r";
for(var i=0;i<document.form1.elements.length;i++){
str=str+ " "+document.form1.elements[i].type
+"\t"+document.form1.elements[i].name
+"\t"+document.form1.elements[i].value+"\r";
}
window.alert(str);
return false;
}
function submitform(){
//使用表单数组+下标访问表单对象
document.forms[0].submit();
}
</script>
<form name="form1" action="/web/user" method="post" οnsubmit="return
display()">
<input type="text" name="text1" value="AAA"/>
<input type="text" name="text2" value="BBB"/>
<input type="checkbox" name="check1" value="aaa"/>
<input type="submit" name="submit" value="提交"/>
<input type="button" name="button" οnclick="submitform();" value="js提交"/>
</form>
注意:单击“提交”按钮会触发表单的onsubmit事件。如果onsubmit的事件处理过程返回
false,则不进行表单数据的提交。但如果直接使用表单对象的submit()方法,则直接将数据提交
出去。
第二节 表单中的基本元素
表单中的基本控件由按钮、单选按钮、复选按钮、提交按钮、重置按钮和文本框等组成。在
JavaScript中要访问这些控件,可以使用以下两种方法实现:
表单.元素名称 例如:document.form1.check
表单.elements[下标] 例如:document.form1.elements[2]
下面分别介绍表单中的各个基本控件。
1、text对象
text对象对应于页面中的text输入框控件。
<input type="text" name="控件名称" value="默认文本" />
属性accessKey 设置或返回访问文本域的快捷键。
使用 Alt + accessKey 为拥有指定快捷键的元素赋予焦点
alt 设置或返回当浏览器不支持文本域时供显示的替代文本。
defaultValue 设置或返回文本域的默认值。
disabled 设置或返回文本域是否应被禁用。
id 设置或返回文本域的 id。
maxLength 设置或返回文本域中的最大字符数。
name 设置或返回文本域的名称。
readOnly 设置或返回文本域是否应是只读的。
size 设置或返回文本域的尺寸。
tabIndex 设置或返回文本域的 tab 键控制次序。
type 返回文本域的表单元素类型。
value 设置或返回文本域的 value 属性的值。
方法blur( ) 将当前焦点移到后台
select( ) 加亮文字,选取文本域中的内容。
focus() 在文本域上设置焦点。
主要事件onfocus,onblur,onselect,onchange
text对象使用示例如下:
<form name="form1">
<input type="text" name="text1" value="Welcome"/>
</form>
<script type="text/javascript">
document.form1.text1.value="this is a javascirpt";
document.form1.text1.select();
alert(document.form1.text1.value);
document.text1.blur();
</script>
2、textarea对象
textarea对象对应于页面中的textarea输入控件。
<textarea name="控件名称">默认文本</textarea>
属性name textarea输入框控件名称
value textarea输入框控件中当前的文本
defaultvalue textarea输入框控件的默认文本
方法blur( ) 将当前焦点移到后台
select( ) 加亮文字
主要事件onfocus,onblur,onselect,onchange
3、select对象
select对象对应于网页中的下拉列表框。
<select name="下拉列表框的名称" size="下拉列表框显示的条数">
<option value="选择值">选项描述</option>
<option value="选择值" selected>选项描述</option>
…………
</select>
属性disabled 设置或返回是否应禁用下拉列表
id 设置或返回下拉列表的 id。
length 返回下拉列表中的选项数目。
multiple 设置或返回是否选择多个项目。
name 设置或返回下拉列表的名称。
options
数组
返回包含下拉列表中的所有选项(option对象)的一个数组。
其中option对象包括如下属性:
text 该选项显示的文字
value 该选项的value值
selected 指明该选项是否别选中
selectedIndex 当前选中项的下标
size 设置或返回下拉列表中的可见行数。
方法options.add() 向下拉列表添加一个选项。
blur() 从下拉列表移开焦点。
focus() 在下拉列表上设置焦点。
remove() 从下拉列表中删除一个选项。
主要事件onfocus,onblur,onchange
4、button对象
button对象对应于网页中的按钮控件。
<input type="button" value="按钮上显示的值" name="控件名称">
属性accessKey 设置或返回访问按钮的快捷键。
alt 设置或返回当浏览器无法显示按钮时供显示的替代文本。
disabled 设置或返回是否禁用按钮。
id 设置或返回按钮的 id。
name 设置或返回按钮的名称。
tabIndex 设置或返回按钮的 tab 键控制次序。
value 设置或返回在按钮上显示的文本。
方法blur() 把焦点从元素上移开。
click() 在该按钮上模拟一次鼠标单击。
focus() 为该按钮赋予焦点。
主要事件onclick
5、checkbox对象
checkbox对象对应于网页中的复选框。
<input type="checkbox" value="值" name="控件名称" checked>选项说明
属性accessKey 设置或返回访问 checkbox 的快捷键。
alt 设置或返回不支持 checkbox 时显示的替代文本。
checked 设置或返回 checkbox 是否应被选中。
defaultChecked 返回 checked 属性的默认值。
disabled 设置或返回 checkbox 是否应被禁用。
id 设置或返回 checkbox 的 id。
name 设置或返回 checkbox 的名称。
tabIndex 设置或返回 checkbox 的 tab 键控制次序。
value 设置或返回 checkbox 的 value 属性的值
方法blur() 从 checkbox 上移开焦点
click() 模拟在 checkbox 中的一次鼠标点击。
focus() 为 checkbox 赋予焦点。
主要事件onclick
6、radio对象
radio对象对应于网页中的单选控件。当网页中具有多个相同名称的单选控件后,就形成了一个
radio对象数组,其中每个单选控件即为一个radio对象。
<input type="radio" value="选项值" name="单选项名称" checked>选项说明
<input type="radio" value="选项值" name="单选项名称" >选项说明
…………
属性accessKey 设置或返回访问单选按钮的快捷键。
alt 设置或返回在不支持单选按钮时显示的替代文本。
checked 设置或返回单选按钮的状态。
defaultChecked 返回单选按钮的默认状态。
disabled 设置或返回是否禁用单选按钮。
id 设置或返回单选按钮的 id。
name 设置或返回单选按钮的名称。
tabIndex 设置或返回单选按钮的 tab 键控制次序。
value 设置或返回单选按钮的 value 属性的值。
方法blur() 从单选按钮移开焦点。
click() 在单选按钮上模拟一次鼠标点击。
focus() 为单选按钮赋予焦点。
主要事件onclick
7、hidden对象
hidden对象对应于网页中的隐藏域。
<input type="hidden" value="值" name="名称" >
属性alt 设置或返回当不支持隐藏输入域时显示的替代文本。
id 设置或返回隐藏域的 id。
name 设置或返回隐藏域的名称。
value 设置或返回隐藏域的 value 属性的值。
8、submit对象
submit对象对应于网页中的submit按钮。
<input type="submit" value="显示文本" name="名称" >
属性accessKey 设置或返回访问提交按钮的快捷键。
alt 设置或返回当浏览器不支持提交按钮时供显示的替代文本。
disabled 设置或返回提交按钮是否应被禁用。
id 设置或返回提交按钮的 id。
name 设置或返回提交按钮的名称。
tabIndex 设置或返回提交按钮的 tab 键控制次序。
value 设置或返回在提交按钮上显示的文本。
方法blur() 从提交按钮上移开焦点。
click() 在提交按钮上模拟一次鼠标点击。
focus() 为提交按钮赋予焦点。
主要事件onclick
9、password对象
password对象对应于网页中的密码输入框。
<input type="password" value="值" name="名称" >
属性accessKey 设置或返回访问密码字段的快捷键。
alt 设置或返回当不支持密码字段时显示的替代文字。
defaultValue 设置或返回密码字段的默认值。
disabled 设置或返回是否应被禁用密码字段。
id 设置或返回密码字段的 id。
maxLength 设置或返回密码字段中字符的最大数目。
name 设置或返回密码字段的名称。
readOnly 设置或返回密码字段是否应当是只读的。
size 设置或返回密码字段的长度。
tabIndex 设置或返回密码字段的 tab 键控制次序。
value 设置或返回密码字段的 value 属性的值。
方法blur() 从密码字段移开焦点。
click() 为密码字段赋予焦点。
focus() 选取密码字段中的文本。
主要事件onfocus,onblur,onselect,onchange
第六章 History与Navigator对象
History对象
History 对象包含用户(在浏览器窗口中)访问过的 URL。
History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。
History 对象属性
属性描述
length 返回浏览器历史列表中的 URL 数量。
History 对象方法
方法描述
back() 加载 history 列表中的前一个 URL。
forward() 加载 history 列表中的下一个 URL。
go(number|URL) 加载 history 列表中的某个具体页面。
-1表示前一个页面
Navigator 对象
Navigator 对象包含有关浏览器的信息。可以使用这些属性进行平台专用的配置。
Navigator 对象的实例是唯一的,可以用 Window 对象的 navigator 属性来引用它。
Navigator 对象集合
集合描述
plugins[]
返回对文档中所有嵌入式对象的引用。
该集合是一个 Plugin 对象的数组,其中的元素代表浏览器已经安装的插件。Plug-in
对象提供的是有关插件的信息,其中包括它所支持的 MIME 类型的列表。
虽然 plugins[] 数组是由 IE 4 定义的,但是在 IE 4 中它却总是空的,因为 IE
4 不支持插件和 Plugin 对象。
Navigator 对象属性
属性描述
appCodeName 返回浏览器的代码名。
appMinorVersion 返回浏览器的次级版本。
appName 返回浏览器的名称。
appVersion 返回浏览器的平台和版本信息。
browserLanguage 返回当前浏览器的语言。
cookieEnabled 返回指明浏览器中是否启用 cookie 的布尔值。
cpuClass 返回浏览器系统的 CPU 等级。
onLine 返回指明系统是否处于脱机模式的布尔值。
platform 返回运行浏览器的操作系统平台。
systemLanguage 返回 OS 使用的默认语言。
userAgent 返回由客户机发送服务器的 user-agent 头部的值。
userLanguage 返回 OS 的自然语言设置。
Navigator 对象方法
方法描述IE F O
javaEnabled() 规定浏览器是否启用 Java。4 1 9
taintEnabled() 规定浏览器是否启用数据污点 (data tainting)。4 1 9
第七章 JavaScript框架编程
一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>或<frame>来标记,用来显
示一个独立的HTML页面。本节介绍框架的自我控制及框架之间的相互访问,例如从一个框架中引用另
一个框架中的JavaScript变量,调用其他框架内的函数,控制另一个框架中表单的行为等。
第一节 框架的引用
在一个HTML 页面中,所有的框架以集合的形式作为window 对象的属性提供,例如
window.frames表示该页面内所有框架的集合,这和表单对象、链接对象等类似。不同的是,这些集
合是document的属性,因此,要引用一个子框架,可以使用如下语法:
window.frames["frameName"]
window.frames.frameName
window.frames[index]
其中,window字样也可以用self代替或省略,假设frameName为页面中第一个框架,则以下写法
是等价的:
window.frames["frameName"]
self.frames["frameName"]
self.frames[0]
frames[0]
frameName
每个框架都对应一个HTML页面,所以这个框架也是一个独立的浏览器窗口,它具有窗口的所有
性质,对框架的引用也就是对window对象的引用。有了这个window对象,就可以很方便地对其中的
页面进行操作,例如使用window.document对象向页面写入数据、使用window.location属性来
改变框架内的页面等。下面分别介绍不同层次框架间的相互引用。
1、父框架到子框架的引用
从父框架引用子框架的方法为:
window.frames["frameName"]
这样就引用了页面内名为frameName的子框架,如果要引用子框架内的子框架,事实上,引用
的框架就是window对象,实现方法如下:
window.frames["frameName"].frames["frameName2"]
这样就很容易引用到了二级子框架,依次类推,可以实现多层框架的引用。
2、子框架到父框架的引用
每个window对象都有一个parent属性,表示它的父框架。如果该框架已经是顶层框架,则
window.parent还表示该框架本身,例如,先创建一个TestA.html文件,其代码如下:
<html>
<head><title>父页面</title></head>
<body>
<form name="formA" id="formA">
<input type="text" name="username" id="username"/>
</form>
<iframe src="TestB.html" width="100%"></iframe>
</body>
</html>
在上面代码中,定义了一个iframe 框架并把TestB.html 文件放在其中,如果需要在
TestB.html中对TestA.html中的username文本框赋值,就应该在TestB.html中实现如下代码:
<script type="text/javascript">
var parentWin=window.parent;
parentWin.formA.username.value="javakc";
</script>
3、兄弟框架间的引用
如果两个框架为同一个框架的子框架,它们称为兄弟框架,可以通过父框架来实现互相引用,例
如一个页面包括2个子框架
<frameset rows="30%,70%">
<frame src="left.html" name="frame1"/>
<frame src="main.html" name="frame2"/>
</frameset>
在frame1中可以使用如下语句来引用frame2。
self.parent.frames["frame2"]
4、不同层次框架间的相互引用
框架的层次是针对顶层框架而言的。当层次不同时,只要知道自己所在的层次以及另一个框架所在
的层次和名字,利用框架引用的window对象性质,就可以很容易地实现互相访问,例如:
self.parent.frames["childName"].frames["targetFrameName"]
5、对顶层框架的引用
和parent属性类似,window对象还有一个top属性,它表示对顶层框架的引用,可以用来一
个框架自身是否为顶层框架,例如:
top.window.formA.username.value="javakc";
也可以采用下面代码验证本框架是否为顶层框架
if(self==top){
//too do
}
对于框架的引用就是对“window”对象的引用,利用window对象的location属性,可以改变
框架的导航,例如
window.frames[0].location="index.html";
这就是将页面中的第一个框架的页面重定向到index.html,利用这个性质,甚至可以使用一条
链接来更多的框架,例如:
<frameset rows="30%,70%">
<frame src="left.html" name="frame1"/>
<frame src="main.html" name="frame2"/>
</frameset>
<a href="frame1.location='index.html';frame2.loaction='top.html'">link</a>
第二节 引用其他框架内的变量和函数
在一个框架中可以引用其他框架内的JavaScript变量和函数,例如:
<script type="text/javascript">
function hello (){
alert("hello javakc");
}
window.hello();
</script>
如果运行这段代码,将会弹出hello javakc的显示对话框,这正是执行hello()函数的结
果。事实上,一个页面内定义的所有全局变量和全局函数都是作为window对象的成员。例如:
var a="javakc";
alert(window.a);
执行代码后就会弹出对话框显示为javakc。同样,在不同框架之间共享变量和函数,就是通过
window对象来调用的。
页面结构如下:
<frameset rows="30%,70%">
<frame src="left.html" name="link"/>
<frame src="main.html" name="show"/>
</frameset>
在left.htm页面中有如下JavaScript代码片段:
<script type="text/javascript">
var arrCars=new Array();
function addToCars(id){
arrCars.push(id);
}
</script>
在main.html页面中有如下代码:
<a href="void(0)" οnclick="self.parent.link.addToCars('id')">加入购物车</a>
第八章 JavaScript异常处理
在代码的运行过程中一般会发生两种错误:一是程序内部的逻辑或者语法错误;二是运行环境或
者用户输入中不可预知的数据造成的错误。JavaScript可以捕获异常并进行相应的处理,从而避免
了浏览器向用户报错。
1、利用try-catch-finally处理异常
用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获异常并进行相应
的处理,其语法如下:
try{
//要执行的代码
}catch(e){
//处理异常的代码
}finally{
//无论异常发生与否,都会执行的代码
}
这与java或者C#异常处理的语言室一致的。通过异常处理,可以避免程序停止运行,从而具有
了一定的自我修复能力。在Ajax开发中,利用异常处理的一个典型应用就是创建XMLHttpRequest
对象,不同浏览器创建它的方式也是不一样的,为了使代码能够跨浏览器运行,就可以利用异常。一种
方法不行,再可以用另一种方法,知道不发生异常为止,例如:
<script type="text/javascript">
var xmlhttp;
try{
//尝试用IE的方式创建XMLHttpRequest对象
xmlhttp=new ActionXObject("Microsoft.XMLHTTP");
}catch(e){
try{
//尝试用非IE的方式创建XMLHttpRequest对象
xmlhttp=new XMLHttpRequest();
}catch(e){
}
}
</script>
利用这种方式,就可以跨浏览器创建XMLHttpRequest对象。
2、利用throw处理异常
在JavaScript中有其内部的异常机制,在遇到非法操作的时候能自动抛出异常,但在实际的开
发中,随着程序的复杂,需要自己实现异常,可以通过throw语句来实现:“throw value”;
其中vlaue 就是要抛出的异常变量,它可以是JavaScript 中的任何一种类型,但在
JavaScript 内部的异常中, 异常参数e 是一个名为error 的对象, 可以通过new
Error(message)来创建这个对象,异常的描述被作为error对象的一个属性message,可以由
构造函数传入,也可以之后赋值。通过这个异常描述,可以让程序获取异常的详细信息,从而自动处理,
例如,下面的程序用于计算两个数据的积,如果参数不是数字,则抛出异常:
<script type="text/javascript">
//函数默认要求参数是数字
function sum(a,b){
a=parseInt(a);
b=parseInt(b);
//如果a或b不能转换为数字则抛出一个异常对象
if(isNaN(a) || isNaN(b)){
throw new Error("参数不是数字");
}
return a*b;
}
try{
//错误的调用
var s=sum(1,"a");
}catch(e){
//显示异常的详细信息
alert(e.message);
}
</script>
程序中使用字母作为参数传递给sum函数是错误的,所以函数内跑粗了一个异常对象,这个对象
被catch语句获取,并使用alert语句显示了其详细信息,
第九章 自定义JavaScript对象
第一节 JavaScript类的定义
一个类是对具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例
(即对象)。
JavaScript中定义一个类的方法如下:
<script language="javascript">
function HelloClass{
alert("类的定义");
//在这里可定义类成员的定义及构造函数
HelloClass(v){
alert("构造");
}
}
new HelloClass();
</script>
上面定义的HelloClass既是一个类成员的定义也是一个类。如果看作是函数,可以把它理解为
类的构造方法,负责初始化的工作。可以应用new操作符来创建一个对象,例如:
new Date();
var obj=new HelloClass();
上面第一句代码表示创建一个日期对象,而Date 就是表示日期的类,但是这个类是由
JavaScript内部提供的,而不是用户定义的。第二句是用new操作符创建用户定义的对象。
在javaScript中,每个对象都可以看作是多个属性(方法)的集合,引用一个属性(方法)的
格式如下:
对象名.属性(方法)名
除此之外,还可以用方括号的形式来引用(注意方括号中的双引号,不可省略):
对象名["属性(方法)名"]
这里所指的方法名和属性名是一个字符串,例如:
var arrs=new Array();
arrs["push"]("javakc"); //添加一个元素(调用对象的方法)
var len=arrs["length"]; //获得数组的长度(调用对象的属性)
alert(len);
上面编写的代码等价于如下代码:
var arrs=new Array();
arrs.push("javakc"); //添加一个元素(调用对象的方法)
var len=arrs.length; //获得数组的长度(调用对象的属性)
alert(len);
上面这种引用属性(方法)的方式,反应出一个JavaScript对象就是一组属性(方法)的集合
这个性质。
利用方括号的形式来引用,这种用法适用于不确定具体要调用哪一个属性(方法)的应用,例如
有一个用户资料的对象,通过一个字符串来表示要使用的属性,就可以用这种方式来引用,其代码如
下:
<script language="javascript">
//定义一个User类,包括三个属性name,age和sex,并指定了初始值。
function User(){
this.name="Tom";
this.age=18;
this.sex="男";
}
//创建User对象
var user=new User();
//根据下拉列表框显示用户的信息
function show(slt){
if(slt.selectedIndex!=0){
alert(user[slt.value]);
}
}
</script>
<!--选择用户信息 -->
<select οnchange="show(this)">
<option value="name">姓名</option>
<option value="age">年龄</option>
<option value="sex">性别</option>
</select>
在上面的代码中,使用一个下拉列表框让用户选择User类的属性,每个选项的value就表示用
户对象的属性名称。
第二节 prototype对象
prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是
function,每个函数对象都具有一个子对象prototype。Prototype 表示了该函数的原型,
prototype表示了一个类的属性的集合。当通过new来生成一个类的对象时,prototype对象的属
性就会成为实例化对象的属性。
下面以一个例子来介绍prototype的应用,代码如下:
<script language="javascript">
//定义一个空类
function HelloClass(){
}
//对类的prototype对象进行修改,增加方法method
HelloClass.prototype.method=function(){
alert("prototype测试");
}
var obj=new HelloClass(); //创建类HelloClass的实例
obj.method(); //调用obj的method方法
</script>
当用new创建一个对象时,prototype对象的属性将自动赋给所创建的对象,例如:
<script language="javascript">
//定义一个只有一个属性的类
function HelloClass(){
this.name="javakc";
}
//使用函数的prototype属性给类定义新属性
HelloClass.prototype.showName=function(){
alert(this.name);
}
var obj=new HelloClass(); //创建类HelloClass的一个实例
//调用通过prototype原型对象定义的showName方法
obj.showName();
</script>
因为prototype是一个JavaScript对象,所以可以为prototype对象添加、修改方法和属性。
第三节 JavaScript反射机制
反射机制是指程序在运行期间能够获取自身的信息,例如一个对象能够在运行时知道自己拥有哪
些方法和属性,并且可以调用这些方法和属性。在C#和Java中都提供了反射机制,能够在运行时动
态判断和调用自己的属性或方法。在JavaScript中可用for(…in…)语句来实现反射,其语法如下:
<script language="javascript">
for(var vs in obj){
//如果是方法就调用执行
if(typeof(obj[vs])=="function"){
obj[vs]();
//如果是属性,则输出它的值
}else{
alert(obj[vs]);
}
}
</script>
在以上代码中利用var vs声明的一个变量用来存储对象obj的属性(方法)名称,有了对象名
和属性(方法)名,就可以使用方括号语法来调用一个对象的属性(方法)了。
上面的程序语句用语遍历obj对象的所有属性和方法,遇到属性则显示它的值,遇到方法,就调
用执行。该语句就是遍历一个集合内的所有成员。在基于对象的JavaScript程序设计中,反射机制是
很重要的一种技术,它在实现类的继承中发挥了很大的作用。
第四节 JavaScript类继承
利用共享prototype实现继承
类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操
作的共享,即子类可以沿用父类(被继承的类)的某些特征。当然子类也可以具有自己独立的属性和操
作。
继承也是软件复用的一种形式,新类由已存在的类生成,通过保留它们的属性和行为并且根据新
类的要求对性能加以修改,添加新的属性和行为。虽然在JavaScript中没有专门的机制来实现类的
继承,但可以通过复制一个类的prototype到另外一个类来实现继承。下面是一种简单的继承实现,
代码如下:
<script language="javascript">
function HelloClass(){
//构造方法
}
function HelloSubClass(){
//构造方法
}
HelloSubClass.prototype=HelloClass.prototype;
HelloSubClass.prototype.Propertys="name";
HelloSubClass.prototype.subMethods=function(){
//方法实现代码
alert("in Methods");
}
var obj=new HelloSubClass();
obj.subMethods();
</script>
在以上的代码中,首先是HelloSubClass具有了和HelloClass一样的prototype,如果不考
虑构造方法,则两个类是等价的。随后,又通过prototype给HelloSubClass赋予了额外的属性和方法
所以HelloSubClass是在HelloClass的基础上增加了新的属性和方法,从而实现了类的继承。
JavaScript提供了instanceof操作符来判断一个对象是否是某个类的实例,对于上面创建的obj
对象,下面两条语句都是成立的:
obj instanceof HelloSubClass //true
obj instanceof HelloClass //true
JavaScript 能够正确地理解这种继承关系,在下面的代码中,先使用property 让
HelloSubClass继承HelloClass,然后再HelloSubClass中重复定义method方法,例如:
<script language="javascript">
//定义HelloClass
function HelloClass(){
//构造方法
}
//定义HelloClass的成员
HelloClass.prototype={
f1:function(){
alert("in HelloClass");
}
}
//定义HelloSubClass
function HelloSubClass(){
//构造方法
}
//让HelloSubClass继承HelloClass
HelloSubClass.prototype=HelloClass.prototype;
//给HelloSubClass重新定义方法method
HelloSubClass.prototype.Propertys="name";
HelloSubClass.prototype.method=function(){
//方法实现代码
alert("in HelloSubClass");
}
//创建两个类的实例
var obj1=new HelloClass();
var obj2=new HelloSubClass();
//分别调用两个对象的method方法
obj1.method();
obj2.method();
</script>
执行上述代码后,弹出两个对话框都显示HelloSubClass 字样。由此可见,当对
HelloSubClass 进行prototype 的改变时,HelloClass 的prototype 也随之改变,即使对
HelloSubClass 对prototype 增减一些成员, HelloClass 的成员也随之改变, 所以
HelloClass和HelloSubClass仅仅是构造方法不同的两个类,它们保持着相同的成员定义,也就
是说HelloClass和HelloSubClass的prototype是完全相同的,是对同一个对象的引用。
在JavaScript中,除了基本的数据类型外(数字、字符串、布尔),所有的赋值以及函数参数都
是引用传递,而不是值传递,所以上面的语句仅仅是让HelloSubClass 的prototype 对象引用
HelloClass 的prototype,造成了类成员定义始终保持一致的效果。从这里也可以看到
instanceof操作符的执行机制,它用于判断一个对象是否是一个prototype的实例,因为这里的
obj1和obj2是对应同一个prototype,所有它们的instanceof的结果是相同的。
利用反射机制和prototype实现继承
前面介绍的通过共享prototype来实现类的继承,并不是一种很好的方法,由于两个类共享同
一个prototype,任何对成员的重定义都会相互影响,不是严格意义上的继承。可以利用反射机制来
实现类的继承,利用for(…in…) 语句枚举所有基类prototype 的成员,并将其赋值给子类的
prototype对象,实现方法如下:
<script language="javascript">
//定义HelloClass
function HelloClass(){
//构造方法
}
//定义HelloClass的成员
HelloClass.prototype={
method:function(){
alert("in HelloClass method");
},
method2:function(){
alert("in HelloClass method2");
}
}
//定义HelloSubClass
function HelloSubClass(){
//构造方法
}
//让HelloSubClass继承HelloClass
for(var p in HelloClass.prototype){
HelloSubClass.prototype[p]=HelloClass.prototype[p];
}
//覆盖HelloClass中的method方法
HelloSubClass.prototype.method=function(){
//方法实现代码
alert("in HelloSubClass method");
}
//创建两个类的实例
var obj1=new HelloClass();
var obj2=new HelloSubClass();
//分别调用两个对象的method方法
obj1.method();
obj2.method();
//分别调用两个对象的method2方法
obj1.method2();
obj2.method2();
</script>
在以上的代码中,obj2 中重复定义的method 方法已经覆盖了继承的method 方法,同时
method2方法未受影响,而且obj1中的method方法仍然保持了原有的定义。这样就实现了正确意
义上的类的继承,也可以为每个类添加一个公共的方法,用以实现类的继承,例如:
//为类添加静态方法inherit表示继承于某类
Function.prototype.inherit=function(baseClass){
for(var p in baseClass.prototype){
this.prototype[p]=baseClass.prototype[p];
}
}
上面用所有函数对象(类)的共同类Function 来添加继承方法,这样所有的类都会有一个
inherit方法,用以实现继承。于是,上面代码中的类的继承可以写为:
//让HelloSubClass继承于HelloClass
HelloSubClass.inherit(HelloClass);
这样,代码逻辑变的更加清楚,也更容易理解。
练习题
单选题
1. 以下哪条语句会产生运行错误:(A)
A. var obj = ( );
B. var obj = [ ];
C. var obj = { };
D. var obj = //;
2. 以下哪个单词不属于javascript保留字:(B)
A. with
B. parent
C. class
D. void
3. 请选择结果为真的表达式:(C)
A. null instanceof Object
B. null === undefined
C. null == undefined
D. NaN == NaN
不定项选择题
4. 请选择对javascript理解有误的:(ABCD)
A.JScript是javascript的简称
B.javascript是网景公司开发的一种Java脚本语言,其目的是为了简化Java的开发难度
C.FireFox和IE存在大量兼容性问题的主要原因在于他们对javascript的支持不同
D.AJAX技术一定要使用javascript技术
5. foo对象有att属性,那么获取att属性的值,以下哪些做法是可以的:(ACE)
A. foo.att
B. foo("att")
C. foo["att"]
D. foo{"att"}
E. foo["a"+"t"+"t"]
6. 在不指定特殊属性的情况下,哪几种HTML标签可以手动输入文本:(AB)
A.<TEXTAREA></TEXTAREA>
B.<INPUT type="text"/>
C.<INPUT type="hidden"/>
D.<DIV></DIV>
7. 以下哪些是javascript的全局函数:(ABC)
A.escape
B.parseFloat
C.eval
D.setTimeout
E.alert
8. 关于IFrame表述正确的有:(ABCD)
A.通过IFrame,网页可以嵌入其他网页内容,并可以动态更改
B.在相同域名下,内嵌的IFrame可以获取外层网页的对象
C.在相同域名下,外层网页脚本可以获取IFrame网页内的对象
D.可以通过脚本调整IFrame的大小
9. 关于表格表述正确的有:(ABCDE)
A.表格中可以包含TBODY元素
B.表格中可以包含CAPTION元素
C.表格中可以包含多个TBODY元素
D.表格中可以包含COLGROUP元素
E.表格中可以包含COL元素
10. 关于IE的window对象表述正确的有:(ACD)
A.window.opener属性本身就是指向window对象
B.window.reload()方法可以用来刷新当前页面
C.window.location="a.html"和window.location.href="a.html"的作用都是把当
前页面替换成a.html页面
D.定义了全局变量g;可以用window.g的方式来存取该变量
11. 如何获取表单select域的选择部分的文本?
12. 在JavaScript中定时调用函数 foo() 如何写?
13. form中的input可以设置readonly和disable,请问这两项属性有什么区别?