第3章〓JavaScript基础










视频讲解







建议学时: 2

在前一章中学习了HTML语言,通过HTML可以利用标签描述一张网页,但是标签式的描述语言限制了网页在客户端进行的一些运算功能。本章学习JavaScript语言,JavaScript嵌入HTML页面内,是一种运行在客户端并由浏览器进行解释执行的脚本语言,具有控制程序流程的功能。本章将学习其基本语法及基本对象。

3.1JavaScript简介

JavaScript是一种网页脚本语言,虽然名字中含有Java,但它与Java语言是两种完全不同的语言。不过,JavaScript的语法和Java语言的语法非常类似。

JavaScript代码可以很容易地嵌入HTML页面中,浏览器对JavaScript脚本程序进行解释执行。

3.1.1第一个JavaScript程序

JavaScript代码可以嵌入HTML中,它的基本写法如firstPage.html文件所示。
firstPage.html




<html>

<body>

<script type="text/javascript">

window.alert("第一个JavaScript程序");<!--弹出消息框-->

</script>	

</body>

</html>





图31页面运行效果

在保存为HTML页面后使用浏览器打开,将会弹出如图31所示的消息框。

注意: JavaScript代码块“<script type="text/javascript">JavaScript代码</script>”除了可以像上面一样写在<body></body>之间外,还可以写到<head></head>之间,其效果相同。

“<script type="text/javascript">JavaScript代码</script>”也可以写为“<script language=" javascript">JavaScript代码</script>”。

JavaScript与Java一样,对大小写是敏感的。

在JavaScript中注释有3种写法,一种是HTML注释的写法“<!注释内容>”,还有两种和Java语言相同,分别为“//单行注释”和“/*多行注释*/”。

用户除了可以将JavaScript代码嵌入HTML中之外,还可以专门将JavaScript代码写在单独的文件中。
code.js




window.alert("第一个JavaScript程序");


然后在另外的HTML页面中插入以下代码来导入该文件。



<script src="code.js" type="text/javascript"></script>


此外,在HTML代码中可以写多个JavaScript代码块。

3.1.2JavaScript语法
1. 变量的定义

JavaScript中的变量为弱变量类型,即变量的类型根据它被赋值的类型改变,定义一个变量使用的格式如下。



var变量名


比如定义变量arg就可以使用“var arg”。如果将一个字符串赋给它,它就是String类型; 如果将一个数组赋给它,它就是数组类型。

下面的var.html文件是一些变量定义的应用例子,代码如下。
var.html




<html>

<body>

<script type="text/javascript">

var arg1,arg2,arg3;<!--定义三个变量-->

var arg4=5;            <!--定义一个整型(Integer)变量-->

var arg5=10.0;          <!--定义一个浮点型(Float)变量-->

var arg6="你好!";      <!--定义字符型(String)变量-->

var arg7=true;           <!--定义一个布尔类型(Boolean)变量-->

var arg8=new Array("王","李","赵","张");<!--定义字符串数组-->

</script>	

</body>

</html>


需要注意的是,在JavaScript中变量未声明就使用是不会报错的,但很容易出现不可预知的错误,所以建议所有变量先声明后使用。

另外,函数Number(字符串)可以将字符串转为数值; 函数String(数值)可以将数值转为字符串。

2. 函数的定义

在JavaScript中定义一个函数的基本格式如下。



function 函数名(参数列表){

return 值;

}


用户也可以在使用中直接匿名定义,格式如下。



var arg1=function(参数列表){ 

return 值;

}


下面的fun.html文件是一个函数定义的应用示例,代码如下。
fun.html




<html>

<body>

<script type="text/javascript">

var arg0="欢迎使用JavaScript";

print(arg0);

function print(arg1){

window.alert(arg1);

}

</script>	

</body>

</html>


其运行效果如图32所示。




图32页面运行效果


实际上,JavaScript的语法和Java的语法基本类似,因此这里不作详细讲述。以上介绍的几个知识点是JavaScript与Java有差别的语法,其他的常用语句与Java类似,比如if判断语句,在JavaScript中的写法如下。



<html>

<body>

<script type="text/javascript">

var score=67;

if(score>=60){

window.alert("及格");





}else{

window.alert("不及格");

}

</script>	

</body>

</html>


又如for循环的写法如下。



<html>

<body>

<script type="text/javascript">

for(var i=1;i<10;i++){

window.alert(i); 

}

</script>	

</body>

</html>


以上写法是与Java一样的。

下面用循环举一个实际的例子。编写一个恶意程序,用户打开,会不断弹出消息框。其代码如“恶意网页.html”文件所示。
恶意网页.html




<html>

<body>

<script language="javascript">

str=new Array("你受骗了","你真的受骗了","真笨啊");

while(true){

for(i=0;i<str.length;i++){

window.alert(str[i]);

}

}

</script>

</body>

</html>


该代码运用了JavaScript中的循环,使得消息框怎么点都不会结束,而且无法关掉浏览器,只能通过关闭进程结束。读者可以进行实验。

3.2JavaScript内置对象

除了可以在代码里面进行简单的编程之外,还可以通过JavaScript提供的内置对象对网页进行操作,内置对象由浏览器提供,可以直接使用,不用事先定义。例如3.1.1节例子中的“window.alert("第一个JavaScript程序")”,其中的window就是一个内置对象。

使用最多的内置对象有以下4个,并且本书之后的学习将主要围绕这4个对象展开。

(1) window: 负责操作浏览器窗口,负责窗口的状态、开/闭等。

(2) history: 可以代替后退(前进)按钮访问历史记录,从属于window。

(3) document: 负责操作浏览器载入的文档(HTML文件),从属于window。

(4) location: 访问地址栏,也从属于window。

注意: 如果一个对象从属于另一个对象,在使用时用“.”隔开,例如window.document.XXX,但是如果从属于window对象,window可以省略,例如window.document.XXX可以写为document.XXX。

3.2.1window对象

window对象的作用如下。

1. 出现提示框

window对象可以跳出提示框,主要有如下功能。

 window.alert("内容"): 出现消息框。

 window.confirm("内容"): 出现确认框。

 window.prompt("内容"): 出现输入框。

下面window1.html文件中代码的功能是显示一些提示框。
window1.html




<html>

<body>

<script type="text/javascript">

//1:消息框

window.alert("消息框");

//2:确认框,根据result的值true或者false来判断

result=window.confirm("您确认提交吗?");

//3: 输入框,str为输入的值,如果取消,str的值为null

str=window.prompt("请您输入一个字符串","");

</script>	

</body>

</html>


用浏览器打开该文件将会依次出现如图33所示的提示框。




图33提示框运行效果


浏览器弹出提示框后载入页面将会停滞,直到用户做出操作动作,其中消息框的实际运用最为广泛,确认框其次,输入框则较为少见。

2. 打开、关闭窗口

window对象还用于控制窗口的状态和开/闭。打开窗口主要使用window对象的open()函数。

下面的window2.html文件是一个打开窗口的应用实例,代码如下。
window2.html




<html>

<body>

<script type="text/javascript">	

window.status="出现新窗口";

//打开新窗口		

newWindow=window.open("window1.html","new1",

"width=300,height=300,top=500,left=500");

//可以通过返回值来控制新窗口

//newWindow.close(); //关闭窗口

</script>

</body>

</html>


在本例中首先让窗口的状态栏显示字符串“出现新窗口”,然后打开一个新窗口window1.html,命名为new1,并指定宽度、高度和其位置。运行效果如图34所示。

在源程序中,“newWindow.close();”表示关闭newWindow。

window对象的status属性值将显示在浏览器左下角的状态栏中,如图35所示。




图34运行效果




图35项目运行效果




综上所述,window.open()在网页制作中的使用非常广泛,参数有3个,第1个是新窗口的地址,第2个是新窗口的名称,第3个是新窗口的状态,其中新窗口状态可设置如下属性。

 toolbar: 是否有工具栏,可选值为1和0。

 location: 是否有地址栏,可选值为1和0。

 status: 是否有状态栏,可选值为1和0。

 menubar: 是否有菜单栏,可选值为1和0。

 scrollbars: 是否有滚动条,可选值为1和0。

 resizable: 是否能改变大小,可选值为1和0。

 width和height: 窗口的宽度和高度,用像素表示。

 left和top: 窗口左上角相对于桌面左上角的x和y坐标。

各属性值用逗号隔开,如下面的代码所示。



newWindow=window.open("window1.html","new1",

"toolbar=0,width=300,height=300,top=500,left=500");


3. 定时器

window对象负责管理和控制页面的定时器,定时器的作用是让某个函数隔一段时间之后运行一次,格式如下。



timer=window.setTimeout("需要运行的函数","时间(用毫秒计)");	


如果要清除定时器,可以用如下代码。



clearTimeout(timer);


下面的timer.html是一个定时器的应用实例,代码如下。
timer.html




<html>

<body>

<script type="text/javascript">	

//setTimeout让函数在某段时间之后运行1次,参数2是毫秒数

timer=window.setTimeout("fun1()","1000");

var i=0;

function fun1(){

i++;

window.status=i;

if(i==100){

window.clearTimeout(timer);//清除定时器,否则会一直运行

return;

}

timer=window.setTimeout("fun1()","1000");

}

</script>

</body>

</html>


其运行效果如图36所示。




图36定时器运行效果

这样,每隔1秒钟状态栏中的数字将会加1,直到100,之后将一直持续100的状态,不再改变。

设置定时器可以使网页定时刷新,这在一些要求计时功能的网页中经常被用到。

3.2.2history对象


history对象包含用户的浏览历史等信息,使用这个对象是因为它可以代替后退(前进)按钮访问历史记录,该对象从属于window。

history对象最常用的函数如下。

 history.back(): 返回上一页,相当于单击浏览器上的后退按钮。

 history.forward(): 返回下一页,相当于单击浏览器上的前进按钮。

 window.history.go(n): n为整数,正数表示向前进n格页面,负数表示向后退n格页面。

下面的history.html文件是history对象的应用实例,代码如下。
history.html




<html>

<body>

<a onclick="history.forward()">前进</a>

<a onclick="history.back()">后退</a>

</body>

</html>


运行history.html,效果如图37所示。




图37history.html

运行效果


单击“前进”或者“后退”,其效果和单击浏览器上的按钮一样。

注意: 此处用到了网页元素的事件,由于篇幅所限,本章仅仅用到单击事件(onclick),对于其他事件,读者可以参考相应文档。

3.2.3document对象

document对象从属于window,其功能如下。

1. 在网页上输出

在网页输出方面,最常见的函数是writeln()。

下面的document1.html文件是writeln()函数的应用实例,代码如下。
document1.html




<html>

<body>

<script type="text/javascript">

document.writeln("你好");

</script>

</body>

</html>




图38document1.html

运行效果

其运行效果如图38所示。

writeln()函数为输出一些简单却重复的代码提供了很大的便利,在下面的例子中将要使用表格显示一个8×8的国际象棋棋盘,正常的方法需要写一个8行8列表格的代码,但会使源代码非常冗长。下面的chess.html文件是使用writeln()函数实现的方法。
chess.html




<html>

<body>

<script type="text/javascript">

document.writeln("<table width=400 height=400 border=1>");

for(i=1;i<=8;i++){

document.writeln("<tr>");

for(j=1;j<=8;j++){

color="black";

if((i+j)%2==0){





color="white";

}

document.writeln("<td bgcolor=" + color + "></td>");

}

document.writeln("</tr>");

}

document.writeln("</table>");

</script>

</body>

</html>




图39棋盘运行效果


借助writeln()和循环方法省去了很多HTML代码的编写。该例的运行效果如图39所示。

2. 设置网页的属性

使用document对象可以进行一些简单网页属性的设置,例如网页的标题、颜色等,并且可以得到网页的某些属性,例如当前地址。其比较常用的设置包括通过document.title来访问标题,通过document.location来获取当前网页的地址等。

下面的document2.html文件是一个设置网页属性的应用实例,代码如下。
document2.html




<html>

<body>

<script type="text/javascript">

function fun(){

document.title="新的标题"; //设置网页标题

window.alert(document.location);   //得到当前网页的地址

}

</script>

<input type="button" onclick="fun()" value="按钮">

</body>

</html>


运行后,单击“按钮”,将会弹出一个消息框,内容为当前页面的地址,并且网页的标题将改变为“新的标题”。对于其他功能,读者可以参考相应文档。

3. 访问文档元素,特别是表单元素

使用document对象可以访问文档中的元素(例如图片、表单、表单中的控件等),前提是元素的name属性是确定的。其访问方法如下。



document.元素名.子元素名…


比如名为form1的表单中有一个文本框account,其中的内容可以用如下代码获得。



var account=document.form1.account.value;


下面的document3.html文件是访问表单元素的例子,其中有两个文本框、一个按钮,输入两个数字,单击“求和”按钮,将显示两个数字的和。其代码如下。
document3.html




<html>

<body>

<script type="text/javascript">

function add(){

//得到这两个文本框的内容

n1=Number(document.form1.txt1.value);

n2=Number(document.form1.txt2.value);

document.form1.txt3.value=n1+n2;				

}

</script>

<form name="form1">

<input name="txt1" type="text"><br>

<input name="txt2" type="text"><br>

<input type="button" onclick="add()" value="求和"><br>

<input name="txt3" type="text"><br>

</form>

</body>

</html>




图310求和运行效果


运行后文本框为空,在第1行和第2行文本框中填入数字并单击“求和”按钮,运行效果如图310所示。

由于使用document对象可以得到网页中元素的值,所以它在客户端的验证中用得非常广泛,比如在注册或登录中可以使用JavaScript得到表单中的值,然后通过判断做出相应的反应。

下面的validate.html文件是一个利用JavaScript判断表单中值的实例,代码如下。
validate.html




<html>

<body>

<script type="text/javascript">			

function validate(){

//得到这两个文本框的内容

account=document.loginForm.account.value;

password=document.loginForm.password.value;

if(account==""){

alert("账号不能为空");

document.loginForm.account.focus(); //聚焦

return;

}

else if(password==""){

alert("密码不能为空");		

document.loginForm.password.focus();	

return;

}	

document.loginForm.submit();					

}

</script>

欢迎您登录:





<form name="loginForm">

输入账号:<input name="account" type="text"><br>

输入密码:<input name="password"  type="password"><br> 

<input type="button" onclick="validate()" value="登录">

</form>

</body>

</html>




图311验证效果


特别提醒: “document.loginForm.account.focus();”为聚焦函数,是使光标移动到调用这个函数的元素位置; “document.loginForm.submit();”为提交表单,与单击“登录”按钮的效果一样。

这样进行验证可以减少服务器遭到恶意登录的可能。

运行网页,不输入账号就进行登录,效果如图311所示。

从上面的程序可以看出,当用户没有输入账号或密码就单击“登录”按钮时将弹出提示填写账号或密码的消息框,直到都填写完整,表单才能提交。

3.2.4location对象

location对象可以访问浏览器的地址栏,它也从属于window,其最常见的功能就是跳转到另一个网页,跳转的方法是修改location对象的href属性。

下面的location1.html文件是一个网页跳转的应用实例,代码如下。
location1.html




<html>

<body>

<script type="text/javascript">

function locationTest(){

window.location.href="image.jpg";

}

</script>

<input type="button" onclick="locationTest()" value="按钮">

<a href="image.jpg">到图片</a>

</body>

</html>


其运行效果如图312所示。




图312location1.html运行效果


单击“按钮”和单击“链接”的效果是一样的,都会跳转到如图313所示的页面。




图313跳转到目标页面


比较常见的另一个应用是定时跳转,在使用时可以结合window的定时器。下面的location2.html文件是它的具体实现,代码如下。
location2.html




<html>

<body>

欢迎您登录,3秒钟转到首页......

<script type="text/javascript">

window.setTimeout("toIndex()","3000"); //在3秒钟后运行一次toIndex()

function toIndex(){

window.location.href="image.jpg";

}

</script>

</body>

</html>


其运行效果如图314所示。




图314location2.html运行效果


3秒钟后界面效果如图313所示。

本 章 小 结

本章学习了JavaScript语言的基本语法和基本内置对象,并通过一些常见应用讲解了这些知识点的使用方法。

值得一提的是,本章只讲解了JavaScript的基本内容,如果读者想要向客户端编程方面发展,需要了解更多的JavaScript知识。

课 后 习 题

一、 填空题

1. 浏览器对JavaScript脚本程序进行执行。

2. JavaScript的3种注释写法为、、。

3. 若将JavaScript代码写在单独的test.js文件中,需要在调用它的HTML页面中插入的代码是。

4. JavaScript的内置对象负责操作浏览器窗口,其中方法可以弹出消息框,方法可以关闭窗口,方法可以打开新窗口。

5. 对象包含用户的浏览历史等信息,其中方法相当于单击浏览器上的后退按钮,方法相当于单击浏览器上的前进按钮。

6. 在名为form的表单中有一个文本框account,其中的内容可以用代码获得。

7. 用location对象实现跳转到网页a.html的代码是。

8. document对象从属于对象。

9. 用document对象可以进行一些简单网页属性的设置,通过来访问标题,通过来获取当前网页的地址。

二、 选择题

1. 下列关于JavaScript的说法错误的是()。



A. JavaScript的语法和Java语言的语法非常类似

B. JavaScript中的变量是弱变量类型,即变量的类型根据它被赋值的类型改变

C. JavaScript对大小写是敏感的

D. 服务器对JavaScript脚本程序进行编译、运行

2. 在HTML页面上编写JavaScript代码时应编写在()标签之间。

A. <body></body>B. <javascript></javascript>

C. <script></script>D. <form></form>

3. 在下面的JavaScript语句中,()定义了一个整型变量并赋值为10。

A. var if=10B. var 1arg=10

C. var arg1=10.0D. var arg1=10

4. window.setTimeout("fun()",1000)表示的意思是()。

A. 间隔1秒后,fun()函数被调用1次

B. 间隔1000秒后,fun()函数被调用1次

C. 间隔1秒后,fun()函数被调用1000次

D. 间隔1毫秒后,fun()函数被调用1000次

5. window对象的()属性用来指定浏览器状态栏中显示的临时消息。

A. titleB. statusC. toolbarD. location

6. 在history对象中不能实现网页前进效果的方法是()。

A. forward()B. back()C. go(1)D. go(2)

7. 在浏览器的状态栏中显示“这是状态栏”消息的代码是()。

A. window.status="这是状态栏"

B. window.status("这是状态栏")

C. status("这是状态栏")

D. status("这是状态栏","")

8. 下列打开新窗口的代码中正确的是()。

A. window.open("window2.html","new")

B. window.open("window2.html","new","")

C. window.open("window2.html")

D. window.open("new","window2.html")

9. 在代码<body onLoad="f1()" onError="f2()"> 

<input onFocus="g1()" onClick="g2()">

</body>中,一定会被调用的方法是()。

A. f1()B. f2()C. g1()D. g2()

三、 上机习题

1. 编写一个金额找零的系统,用输入框输入一个整数,表示找零的数量,数值为1~100。假如系统中有50、20、10、5、1这5种面额的纸币,显示每种纸币应该找的数量。例如78元应该为50元1张、20元1张、5元1张、1元3张。

2. 在表单中输入5本书的价格,显示这5本书价格的和。

3. 用document对象在屏幕上打印100个“欢迎”。

4. 用表单输入10本书的价格,然后显示这10本书的最高价格、最低价格和平均价格。