JavaScript从入门到精通(视频实战版)
上QQ阅读APP看书,第一时间看更新

第2章 第一个例子—向用户说“你好”

本书中所有的知识点都将以实例为依据进行介绍。读者在阅读时,可以先按照前言中介绍的方法执行实例,有了一个直观的感受后再学习各个知识点,这样会有比较深的印象。多动脑、多动手,是学习JavaScript的最佳方式。

本章知识点:

❑ 如何将JavaScript应用到HTML页面中

❑ JavaScript代码书写规则

❑ 基础知识—变量和常量

❑ 内置对象Date的方法应用

❑ 在Web页面的3种输出方式

2.1 第一个例子

不论程序的运算机制和目的如何,最后都离不开和用户的交互。这种交互包括两个方面:输入和输出。本节讲述的就是JavaScript一些常见的输出方法。

2.1.1 最简单的程序—“用户你好”

【实例2.1】代码2-1.htm是本书的第一个例子:向用户说“你好”。读者可以用记事本录入下面的代码,保存为2-1.htm文件,然后双击该文件查看运行效果。

代码2-1.htm 向用户说“你好”

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-1  向用户说"你好"</title>
05 <!-- 脚本部分 -->
06 <script type="text/javascript">
07      what_to_say = "你好";
08      alert(what_to_say);
09 </script>
10 </head>
11 <body style="overflow:auto;">
12 </body>
13 </html>

【代码说明】代码中所有的标点符号都是半角的英文符号。

【运行效果】页面在IE6.0中运行的效果如图2.1所示。

图2.1 向用户说“你好”

2.1.2 在HTML中插入JavaScript块

JavaScript脚本作为客户端的一种脚本语言,必须依赖于HTML文件存在。也就是说,用户最终访问的是HTML文件而不是直接的脚本。在HTML文件中嵌入JavaScript脚本的方式有以下两种:

❑ 如同本章示例代码2-1.htm中所用的方式,直接在HTML文件中使用script标记插入脚本块。脚本内容放置在script标记块内部。语法如下:

<script type="text/javascript">
//  代码内容
</script>

❑ 将脚本内容单独保存为一个文件,假设名称是“1.js”,然后设置script标记的src属性指向该文件。语法如下:

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

脚本块script标记的type属性表明了脚本所使用的语言。在很多书和网上的示例中,使用language属性来表明脚本所用语言,形如:

<script language="javascript">

这种用法是在HTML尚未规范时约定的用法,并不符合网页的规范标准。随着网页标准化和xHTML标准的推行,这种用法虽然目前还能被大多数浏览器识别,但并不推荐使用。

在有些脚本代码中常见到如下的代码:

<script type="text/javascript">
<!--
//  代码内容
//-->
</script>

代码中的“<!--”和“//-->”是为了在浏览器不支持脚本时,能够让浏览器将脚本识别为HTML注释,以免显示不必要的内容。不过在现在的主流浏览器中,不能识别脚本的情况已经基本不存在。需要注意的是,在使用方法二从外部连接一个脚本文件时,脚本文件的内容不可这样使用HTML注释,否则会报错。

使用方法一,在HTML页面内嵌入JavaScript脚本的时候,代码中不可出现“</script>”字样。如下面的代码就是错误的:

<script>
alert("</script>");
</script>

这是因为浏览器在载入HTML并试图解释的时候,会认为第一个出现“</script>”的地方就是脚本的结束,这就造成了语法的错误。解决的方法也很简单,将“</script>”字符串拆开即可。

<script>
alert("</s" + "cript>");
</script>

2.1.3 JavaScript代码书写规则

从原则上来说,只要程序员编写的代码没有语法错误,就能够被浏览器识别并执行。但是实际上,有些约定俗成的代码书写规则是每一个程序员都必须要遵守的。尤其是初学者,必须时刻注意自己代码的可读性。这不仅仅是为了方便他人阅读代码,同时也是为了编写者自身考虑。试想当一段数百行的代码,时隔3个月后,就算代码作者本人想要修改,也不得不阅读一遍来熟悉代码的结构,这时良好的代码书写习惯就至关重要了。

一般的代码书写规则如下:

❑ 合理的注释。代码中的注释可以提纲挈领地告诉阅读者,下面这段代码有什么作用。JavaScript中注释分为两种:行注释和块注释。行注释以“//”开始,至此行结束为注释内容。块注释自“/*”开始,至“*/”结束为注释内容。注释内容不会被解释执行,只是为了便于代码的阅读和理解。注释的示例如下:

// 这里的文本是行注释
/* 这里的文本是块注释
   块注释可以换行
   块注释结束 */

❑ 规范的变量命名。这一点将在2.2节中详细讲述。

❑ 规范的缩进。程序中包含了很多逻辑关系,例如函数、循环、逻辑判断等。不同的代码功能构成不同的代码块。代码的书写要能够表现出这种逻辑,通常采用缩进的方式。常见的两种缩进方式如下:

/* 缩进方式1 */
function a(){                       //函数a模块开始
    函数语句1;                       //这里的代码都是属于函数a的
    函数语句2;                       //因此应该具有统一的缩进
    if(1>2){                        //这里是逻辑判断的模块
        函数语句3;                   //这里的内容都是属于逻辑判断中的
        函数语句4;
    }                               //逻辑判断的模块结束
    函数语句5;                       //相同层次的代码具有相同的缩进量
}                                   //函数a模块结束

/* 缩进方式2 - 和方式1区别只是在于格式不同 */ function a() { 函数语句1; if(1>2) { 函数语句2; } 函数语句5; }

2.2 JavaScript基础知识—变量和常量

JavaScript作为一种计算机语言,具有计算机语言的7个要素:输入、输出、操作、数据、分支、循环和子程序。数据是一切程序的基础构成。JavaScript中,数据有变量和常量两种形式。

JavaScript常量又称字面常量,是固化在程序代码中的信息。变量的主要作用是存取数据,为使用者提供一个存取信息的容器。对于变量,必须理解变量的命名、类型、声明和作用域。

2.2.1 变量命名规则

变量就是一个用来储存数据的容器,通常由英文字母和数字组成。在JavaScript中,声明变量有以下两种方式:

❑ 显式声明。使用关键字“var”声明。语法如下:

var 变量名;
var 变量名1, 变量名2, 变量名3;
var 变量名1=22, 变量名2="this is a string.";

可以用英文半角逗号“,”做分隔,一次性声明若干变量。也可以在声明的同时给变量赋值。

❑ 隐式声明。通过赋值操作符“=”声明(操作符的概念及介绍见下一章)。语法如下:

变量名=22;
变量名="this is a string";

注意

在声明变量前使用变量会产生意外的错误。初学者应该养成在程序或函数前方声明所有变量的好习惯,虽然这并不是语法的强制要求。

本章示例2-1.htm中,“what_to_say”就是一个变量,用于储存需要显示给用户的信息。变量的命名需要符合以下规则:

❑ 必须以半角英文字母a~z(大小写均可)、下划线“_”或美元符号“$”开头。

❑ 变量名只能由半角英文字母a~z(大小写均可)、下划线“_”、美元符号“$”或者数字0~9组成。不能有其他符号。

❑ 变量名不可以是JavaScript的关键字。JavaScript中定义了40多个词作为关键字,供程序自身使用,这些词不可以作为变量名来使用。如if、var、false、for、class和delete等不能作为变量名。

因此,以下的几个变量名都是错误的:

2ba = "你好";       //变量名不可以以数字开头
cba = "你好";      //变量名中的c是全角字符
ni hao = "你好";    //变量名中不可以有空格
var = "你好";       //变量名不可以为关键字

注意

JavaScript是一种区分大小写的语言。也就是说,在JavaScript中,“abc”和“Abc”被认为是两个不同的变量。

以上只是作为程序语法的硬性要求。为了提高代码的可读性,程序员在命名变量时还应该遵循以下约定俗成的规则:

❑ 变量名应尽可能地体现出其代表的含义。例如像“a”、“t1923”、“wdss”都不是一个好的变量名,而“user_name”、“comment_text”能够让代码阅读者直观地知道该变量的内容。

❑ 虽然JavaScript区分大小写,但也要尽量避免大小写混淆。例如不要同时使用“username”和“UserName”作为变量名。

❑ JavaScript变量的大小写通常有两种习惯的书写方式:一种是每个单词都小写,单词和单词间用下划线连接,如同本章2-1.htm例子中的“what_to_say”变量;另一种是第一个单词的字母全部小写,后继单词的首字母大写,单词和单词直接连接在一起,例如“userName”、“whatToSay”等。除缩略语(如“HTML”、“URL”等)外,应尽量避免使用所有字母大写的变量。例如“HELLO”、“USER_NAME”就不是一个好的命名习惯。因为在很多程序语言中,所有字母大写被用来定义静态变量,虽然JavaScript中不存在静态变量,但也应尽量避免。

❑ 依据变量所保存数据的类型不同,有时也会在变量名上加上代表数据类型的前缀。比如“strUserName”是一个字符串类型的、用来保存用户名称的变量,“intAge”是一个整数类型的、用来保存年龄的变量。

这些规则并不是强制性的,但是遵从这些规则可以让代码更加清晰易读。如果只是写一些给自己看的代码,读者完全可以自己定义一套规则。但是为了更好地和别人交流,推荐使用以上的命名规则。

2.2.2 数据类型

JavaScript中有四种基本数据类型:整型、字符串、布尔型和空值。由于JavaScript是一种弱类型语言,因此变量或常量不必先声明其类型,而是在使用或赋值时确定其数据的类型。本章示例代码2-1.htm中,“你好”就是一个字符型数据。

❑ 整型。整型常量就是数字,可以使用十进制、八进制和十六进制,如:

intN = 1;          //十进制
intN = 03;         //八进制:以0开头的阿拉伯数字
intN = 0x22;       //十六进制:以0x开头的阿拉伯数字

❑ 字符串。字符串就是以英文双引号“"”或单引号“'”括起来的一个或几个字符,如:

strS = "你好";    //用双引号括起来的字符串
strS = '你好';    //用单引号括起来的字符串

❑ 布尔型。布尔型常量就是逻辑上的“真”和“假”。

blnB = true;      //真
blnB = false;     //假

❑ 空值。JavaScript中,用“null”表示什么都没有。

2.3 告诉用户当前时间

【实例2.2】只能和用户说声“你好”的程序太过简单了,代码2-2.htm可以告诉用户当前的时间。

代码2-2.htm 告诉用户当前时间

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-2  告诉用户当前时间</title>
05 <!-- 脚本部分 -->
06 <script type="text/javascript">
07      date_object = new Date();
08      what_to_say = date_object.toLocaleString();
09      alert(what_to_say);
10 </script>
11 </head>
12 <body style="overflow:auto;">
13 </body>
14 </html>

【代码说明】第6~10行是一段JavaScript代码,其中第9行是弹出提示时间的对话框。

【运行效果】程序的运行效果如图2.2所示。

图2.2 告诉用户当前时间

2.3.1 什么是内置对象

在前言中提到过,JavaScript是一种基于对象的语言。那么什么是“对象”?简单地说,“对象”就是口语中所说的“东西”,在JavaScript中,所有的元素都是对象。每一个变量是对象,每一个常量也是对象。甚至“你好”这样的字符串也是对象。

“对象”这个概念既然来自生活中的“东西”,那么就和生活中的事物有着类似的概念。如果把汽车看作一个对象,那么汽车有长、宽、高这些固有的性质,在程序中,被称为对象的“属性”。汽车有行驶的能力,在程序中,被称为对象的“方法”。汽车通过鸣响警报来通知车主有人偷车,在程序中,对象会激发一个“被偷走了”的“事件”。

JavaScript有很多的预先定义好的对象,可以直接在脚本中使用,这种对象被称为内置对象。代码2-2.htm中的Date就是一个内置对象。获得Date对象的语法是:

dateObj = new Date();                                  //不提供参数,可以获取当前时间
dateObj = new Date(dateVal);                           //将dateVal变量解析为时间日期
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]);
                                                       //根据给定的时间日期构造Date对象

new是创建新对象的操作符,在第3章中会有更详细的介绍。通过该运算符创建一个新的Date对象,并保存在变量dateObj里。

2.3.2 内置对象Date的方法

内置对象Date没有专有属性。表2.1是Date对象的方法列表。

表2.1 Date对象的方法

获得Date对象后,使用点“.”操作符引用其所有的属性或方法。例如,获取当前年份的做法是:

dateObj = new Date();                              //不提供参数,可以获取当前时间
theYear = dateObj.getYear();                       //引用getYear方法获取当前年份

2.3.3 获取时间和日期

【实例2.3】通过2.3.2小节列出的内置Date对象的方法,可以轻松得到当前的日期和时间。代码2-3.htm演示了如何获取时间和日期。

代码2-3.htm 获取时间和日期

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-3  获取当前时间日期</title>
05 <!-- 脚本部分 -->
06 <script type="text/javascript">
07     dt = new Date();
08     what_to_say = "今天是"+dt.getYear()+"年"+(dt.getMonth()+1)+"月"+dt.getDate()+",现在
09 时间是"+dt.getHours()+"点"+dt.getMinutes()+"分"+dt.getSeconds()+"秒";
10     alert(what_to_say);
11 </script>
12 </head>
13 <body style="overflow:auto;">
14 </body>
15 </html>

【代码说明】第7行定义了一个时间对象,然后第8~9行获取时间的每个独立信息。

【运行效果】程序运行效果如图2.3所示。

图2.3 获取时间和日期

注意

Date对象的getMonth方法返回的日期值是从0~11的,在显示或计算的时候应当加上1。

如前所述,双引号括起来的部分就是字符串,代码中使用“+”号将各字符串连接起来。关于字符串对象在下一章中会详细讲述。

2.4 在Web页上输出

在Web页上通过JavaScript将数据输出显示给浏览者有很多种方式。最常见的在前面已有所涉及,即弹出一个警告框,在警告框中显示一些信息。但是这种方式常常会引起浏览者的反感,因此有时还需要其他输出方式。

2.4.1 弹出警告框—alert

前文的代码中使用过的alert函数是JavaScript最常见的一种输出方式。其效果是在网页窗口中弹出一个警告框。alert函数只有一个参数,就是要输出的字符串。语法如下:

alert("警告");             //直接使用字符串
alert(0.2233);            //可以使用数字做参数
alert(something);         //使用变量做参数

2.4.2 弹出确认“是/否”的对话框—confirm

【实例2.4】有时仅仅显示信息还不足以满足应用的需求,页面还需要浏览者确认“是”或者“否”。confirm函数可以弹出一个包含“是/否”两个按钮的对话框。代码2-4.htm演示如何使用confirm函数。

代码2-4.htm 弹出确认“是/否”的对话框

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-4 弹出确认"是/否"的对话框</title>
05 <!-- 脚本部分 -->
06 <script type="text/javascript">
07     result = confirm("我是提示信息");
08     alert("你点击的结果是"+result);
09 </script>
10 </head>
11 <body style="overflow:auto;">
12 </body>
13 </html>

【代码说明】confirm函数会将用户选择的结果返回,返回值是一个布尔型变量。单击“确定”按钮返回“true”,单击“取消”按钮返回“false”。

【运行效果】代码运行效果如图2.4和图2.5所示。

图2.4 弹出confirm对话框

图2.5 接受用户选择

2.4.3 输出到页面内容—document.write

【实例2.5】弹出警告框的方式在用户体验上并不是很好,特别是在有很多信息需要用JavaScript输出的时候。代码2-5.htm演示了另外一种常见的输出方式,使用document.write来将内容输出到页面。

代码2-5.htm 使用document.write将内容输出到页面

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-5 使用document.write将内容输出到页面</title>
05 <!-- 脚本部分 -->
06 <script type="text/javascript">
07      document.write("你好");
08      document.write("<br><b>可以输出HTML</b>");
09 </script>
10 </head>
11 <body style="overflow:auto;">
12      <input type="button" value="点我"
13           onclick="document.write('在页面加载完成后再次使用document.write会清空原来的
14 所有内容');" />
15 </body>
16 </html>

【代码说明】document.write函数接受字符串参数,将字符串输出到当前的Web文档中。所以可以动态地生成HTML格式的内容。单击“点我”按钮后会执行按钮onclick属性中的JavaScript代码。其运行效果说明,在页面加载完成后,再次使用document.write会清空原来的所有内容。

【运行效果】程序运行效果如图2.6和图2.7所示。

图2.6 使用document.write输出到页面

图2.7 单击“点我”按钮后的运行效果

2.5 改进版的“你好”程序

【实例2.6】综合上面各小节的知识点,代码2-6.htm是一个比较完善的“你好”程序。

代码2-6.htm 改进版的“你好”程序

01 <html>
02 <head>
03 <meta http-equiv="content-type" content="text/html; charset=GB2312" />
04 <title>2-6 改进版的"你好"程序</title>
05 </head>
06 <body style="overflow:auto; padding:0px; margin:0px;">
07 <div style="font-size:14px; font-weight:bold; color:white; font-family:Arial, 宋体;
08 background-color:#6090DA; padding:4px 10px;">
09      你好
10      <script>
11           if(confirm("需要显示时间吗?")){
12                 dt = new Date();
13                 document.write(",当前时间是 ");
14                 document.write(dt.toLocaleTimeString());
15           }
16      </script>
17 </div>
18 </body>
19 </html>

【代码说明】程序中,JavaScript代码的第11行(黑体)的if语句是根据confirm返回的结果判断是否输出时间的流程控制语句。关于流程控制语句的详细介绍见第5章。

【运行效果】程序运行效果如图2.8、图2.9和图2.10所示。

图2.8 改进版的“你好”程序

图2.9 读取当前时间输出到页面

图2.10 取消时间则简单显示“你好”

2.6 小结

本章作为初学者的JavaScript入门章节,用一些具体的例子演示了JavaScript能够实现的最初步应用。本章中的所有代码都可以直接保存为htm文件,在IE浏览器中查看效果。随着教程的逐步深入,读者可以在实例中学习到JavaScript的语法等基础知识。

2.7 常见面试题分析

1. JavaScript使用什么符号注释代码语句

行注释以“//”开始,至此行结束为注释内容。块注释自“/*”开始,至“*/”结束为注释内容。

2. JavaScript在HTML网页中的什么位置

JavaScript嵌入HTML的多种方式:

❑ 在HTML网页头中嵌入。

❑ 在HTML网页体中嵌入。

❑ 在HTML网页的元素事件中嵌入。

❑ 在HTML中调用已经存在的JavaScript文件。

2.8 本章习题

1.每一个页面都有一个唯一的地址,它被称作什么?

2.所有的HTML标签都是成对的吗?举例说明。

3. HTML文档的扩展名有什么要求?

4.操作题

目的:用记事本制作一个HTML页面。

要求:

❑ 利用所学习到的HTML知识,把能够想到的标签都使用上。

❑ 制作出一个丰富内容的页面,并用至少两种不同的浏览器查看运行效果。