- JavaScript语 言 是 一 种 新 型 的 Script(文 编
)语 言 ,由 Netscape通 信 公司 首 创 ,并 在 其
发 行 的 Netscape Navigator 2.0及 以 后 版 本 中
予 以 支 持 。 使 用 Netscape 2.0浏览 器 可
以 识 别 嵌 在 HTML中 的 JavaScript语 句 ,能
够 响 应 用 户 点 击 鼠 标 、 输 入 表 格
、 页 面 导 航 等 类 似 的 事 件 。
JavaScript的 出 现 引 起 有 关 公 司 的 密 切
注 视 ,已 有 大 约 30家 公 司 已 同意 支 持
这 种 语 言 。
-
(一 )
- JavaScript语 言 的 发 展
- JavaScript语 言 起 初 并 不 叫 此 名 称 ,它
的 早 期 是 Netscape的 开 发 者们 称 之 为
"Mocha"的 语 言 ,开 始 在 网 上 进 行
β 测 试 时 ,名 字 改 为 "LiveScript",直
至 发 行 Netscape 2.0β 测 试 版 时 才 称 其
为 "JavaScript"。
- 支 持 JavaScript的 Navigator 2.0的 网 络 浏 览
器 能 够 解 释 并 执 行 嵌 在 HTML中 的
JavaScript语 言 书 写 的 "程 序 "。
JavaScript具 有 很 多 采 用 CGI/PERL编 写 的
Script的 能 力 ,其 优 点 是 可 以 引 用 主
机 资 源 ,响 应 位 于 服 务 器 Web页 中 相
应 语 法 元 素 要 完 成的 功 能 ,而 又 不
与 主 机 服 务 器 进 行 交 互 会 话 的 优
点 。
- Sun公 司 推 出 Java之 后 ,Netscape引 进 了 Sun的
有 关 概 念 ,将 自 己 原 有 的
"LiveScript"更 名 为 "JavaScript",它
不 仅 支 持 Java的 Applet小 程 序 ,同 时 向
Web作 者 提 供 一 种 嵌 入 HTML文 档 进 行
编 程 的 、 基 于 对 象 的 Script程 序 设 计
语 言 ,采 用 的 许 多 结 构 与Java相 似 。
- JavaScript与 Sun公 司 推 出 的 Java语 言 在 起
名 上 有 些 相 近 ,容 易 引起 概 念 上 的
混 淆 ,其 差 异 为 :
- (1)JavaScript不 是 Java的 替 代 语 言
- 尽 管 JavaScript有 许 多 与 Java相 似 的 结 构
,但 它 的 使 用 背 景 不 同。 Java是 基 于
C++、 面 向 计 算 机 程 序 设 计 人 员 提
供 的 语 言 ,对 非 程 序 设 计 人 员 不 易
学 习掌 握 ;JavaScript是 一 种 文 编 (Script)语
言 ,面 向 非 程 序 设 计 人 员 编 写 Web页
、 增 加 编 写 交 互 界 面灵 活 性 的 一
种 简 洁 易 懂 的 语 言 。 最 近 发 布 的
Navigator 3.0β 测 试 版 中 ,内 嵌 支 持 的
JavaScript将 能 够 真 正 调 用 嵌 在 同 一
HTML文 档 中 的 Java Applet,内 嵌 的 Java Applet小
程 序 也 可 以 调 用 JavaScript。 两 种 语 言
相 互 支 持 、 相 互 补 充 ,而 非 相 互 代
替 。
- (2)JavaScript源 代 码 无 须 编 译
- 嵌 入 HTML文 档 中 的 JavaScript源 代 码 实 际
上 是 作 为 HTML文 档 Web页的 一 部 分 存 在
的 。 在 浏 览 者 使 用 Netscape 2.x浏 览 器
浏 览 具 有 JavaScript源 代 码 的 HTML文 档页
时 ,由 浏 览 器 本 身 对 该 HTML文 档 进 行
分 析 、 识 别 、 解 释 并 执 行 用
JavaScript编 写 的 源代 码 (用 户 可 以 使 用
查 看 HTML源 代 码 的 功 能 看 到 JavaScript源
代 码 的 存 在 )。
- Java则 与 之 不 同 。 Java的 源 代 码 必 须
进 行 编 译 ,成 为 存 在 服 务器 中 的 代
码 ,通 过 HTML文 档 中 的 <applet>标 记 ,经
过 HTTP的 连 接 、 加 载 后 方 能 运 行 。
- (3)JavaScript无 须 特 殊 开 发 环 境
- 由 于 JavaScript是 嵌 在 HTML文 档 中 的 一 部
分 ,以 一 般 的 文 本 编 辑器 就 可 以 连
同 HTML一 道 进 行 编 辑 ,开 发 使 用 较 Java相
对 快 捷 。
- JavaScript的 特 点
- (1)节 省 了 CGI的 交 互 时 间
- 随 着 WWW的 迅 速 发 展 ,有 许 多 WWW服 务
器 提 供 的 服 务 要 求 与 浏 览者 进 行
交 互 ,确 定 浏 览 者 的 身 份 、 需 要 服
务 的 内 容 等 等 ,这 项 工 作 通 常 由
CGI/PERL编 写 相 应 的 接 口 程 序 与 用 户
进 行 交 互 来 完 成 。 很 显 然 ,通 过 网
络 与 用 户 的 交 互 过 程 一 方 面 增 大
了 网络 的 通 信 量 ,另 一 方 面 影 响 了
服 务 器 的 服 务 性 能 。 服 务 器 为 一
个 用 户 运 行 一 个 CGI时 ,需 要 一 个进
程 为 它 服 务 ,它 要 占 用 服 务 器 的 资
源 (如 CPU服 务 、 内 存 耗 费 等 ),如 果 用
户 填 表 出 现 错 误 ,交互 服 务 占 用 的
时 间 就 会 相 应 增 加 。 被 访 问 的 热
点 主 机 与 用 户 交 互 越 多 ,服 务 器 的
性 能 影 响就 越 大 。
- JavaScript是 一 种 基 于 客 户 端 浏 览 器 的
语 言 ,用 户 在 浏 览 中 填 表 、 验 证 的
交 互 过 程 只 是 通 过 浏 览 器 对 调 入
HTML文 档 中 的 JavaScript源 代 码 进 行 解 释
执 行 来完 成 的 ,即 使 是 必 须 调 用 CGI的
部 分 ,浏 览 器 只 将 用 户 输 入 验 证 后
的 信 息 提 交 给 远 程 的 服务 器 ,大 大
减 少 了 服 务 器 的 开 销 。
- (2)节 省 了 浏 览 者 的 访 问 时 间 和 网
络 的 流 量
- 由 于 用 户 与 主 机 的 交 互 工 作 放 在
了 客 户 浏 览 器 端 进 行 ,用 户输 入 的
信 息 在 本 地 就 可 以 得 到 验 证 、 处
理 ,用 户 与 主 机 的 交 互 时 间 减 少 ,网
络 的 通 信 量 相 应降 低 ,用 户 也 免 除
了 提 交 一 个 无 意 出 错 的 表 格 后 的
等 待 时 间 。
- (3)将 Java Applet作 为 处 理 对 象
- 由 于 JavaScript是 一 种 面 向 对 象 的 语 言
,一 个 Web页 中 的 窗 口 、 当 前 所 处 的
URL地 址 、 浏 览 资 源 的 历 史 、 文 档
的 属 性 (如 标 题 、 题 头 、 背 景 色 、
表 格 等)都 作 为 对 象 来 处 理 。 同 样
,Java中 的 Applet小 程 序 也 被 JavaScript当 做
对 象 来 引 用 、 控 制 ,Java Applet可 以 与
JavaScript通 信 ,改 变 一 个 Web页 的 构 成 ,具
有 很 大 的 灵 活 性 。
- (二 )
- JavaScript的 编 程
- (1)一 个 简 单 的 例 子
- JavaScript的 编 程 工 作 复 杂 与 否 和 HTML文
档 所 提 供 的 功 能 大 小 密 切 相 关 ,我
们 用 几 个 简 单 的 例 子 来 介 绍 它 的
编 程 特 点 。
- 例 1.一 个 简 单 的 Script
- <HTML>
- <TITLE>This is a test</TITLE>
- <HEAD>
- <SCRIPT LANGUAGE="JavaScript">
- <!-- to hide script contents from old browsers
- // end hiding contents from old browsers -->
- </SCRIPT>
- </HEAD>
- <BODY>
- This is a test:
- <SCRIPT LANGUAGE="JavaScript">
- document.write "Hello!"
- </SCRIPT>
- </BODY>
- </HTML>
- 例 1显 示 结 果 为 :
- This is a test:Hello!
- 从 以 上 例 子 中 可 以 发 现 ,JavaScript源
代 码 被 嵌 在 一 个 HTML文 档中 ,它 可 以
出 现 在 文 档 头 部 (HEAD节 )和 文 档 体 部
(BODY节 )。 SCRIPT标 记 的 一 般 格 式 为 :
- <SCRIPT LANGUAGE="JavaScript">
- JavaScript语 句 串 · · ·
- </SCRIPT>
- 为 了 使 老 版 本 的 浏 览 器 (即 Navigator
2.0版 以 前 的 浏 览 器 )避 开不 识 别 的
"JavaScript语 句 串 ",用 JavaScript编 写
的 源 代 码 可 以 用 注 解 括 起 来 ,即 ,使
用 HTML的 注 解 标 记 <!--· ·
· -->(如 上 例 所 示 ),而 Navigator 2.x可
以 识 别 放 在 注 解 行 中 的 JavaScript源 代
码 。
- (2)一 个 调 用 函 数 的 例 子
- 内 建 函 数 在 JavaScript中 占 有 很 大 的 比
例 ,由 于 它 由 Netscape浏 览器 支 持 并 解
释 执 行 ,给 Web制 作 者 提 供 了 编 写 的
工 具 函 数 ;JavaScript还 为 用 户 提 供 自
己 定义 函 数 和 调 用 函 数 的 能 力 ,使
Web编 写 者 具 有 编 程 手 段 的 灵 活 性
。
- 函 数 的 定 义 与 调 用 同 一 般 的 程 序
设 计 语 言 类 似 ,但 由 于 浏 览器 浏 览
的 Web页 是 顺 序 从 WWW服 务 器 调 出 ,并
由 Netscape浏 览 器 解 释 执 行 的 ,函 数 必
须 先 定 义 (一般 放 在 HEAD节 )后 调 用 (一
般 放 在 BODY节 )。
- 例 2.一 个 有 函 数 定 义 和 调 用 的 Script
- <HTML>
- <TITLE>This is a function's test</TITLE>
- <HEAD>
- <SCRIPT LANGUAGE="JavaScript">
- <!-- to hide script contents from old browsers>
- function square(i){
- document.write("The call passed",i,"to the
square function.","<BR>")
- return i*i
- }
- document.write("The function
re-turned",square(8),".")
- //end hiding contents from old drowsers-->
- </SCRIPT>
- </HEAD>
- <BODY>
- <BR>
- All done.
- </BODY>
- </HTML>
- 该 例 显 示 结 果 为 :
- The call passed 8 to the square func-tion.
- The function returned 64.
- All done.
- 从 执 行 结 果 可 以 看 出 ,一 个 函 数 定
义 时 并 不 发 生 作 用 ,只 有 在 引 用 时
(函 数 定 义 后 的 document.write语 句 )才 被
激 活 。
- (3)编 写 事 件 处 理 程 序
- JavaScript的 应 用 中 大 量 采 用 事 件 驱 动
。 Web页 中 的 一 个 事 件 是指 用 户 做 一
件 事 后 引 起 的 动 作 。 例 如 ,用 户 移
动 鼠 标 到 某 个 链 接 点 、 点 击 鼠 标
、 针 对表 格 填 写 后 的 提 交 动 作 等
都 被 认 为 是 一 个 事 件 。 Web页 作 者
可 以 定 义 事 件 处 理 程 序 (event handler),在
出 现 一 个 事 件 后 自 动 触 发 执 行 该
事 件 处 理 程 序 。 例 3是 一 个 由 事 件
驱 动 (输 入 后 点击 Cal-culate按 钮 的 动 作
)的 例 子 。
- 例 3.具 有 填 表 和 提 交 功 能 的 事 件 处
理 Script
- <HTML>
- <TITLE>Form Object example</TITLE>
- <HEAD>
- <SCRIPT LANGUAGE="JavaScript">
- function compute(obj){
- obj.result.value=eval(obj.expr.value)
- }
- </SCRIPT>
- </HEAD>
- <BODY>
- <FORM NAME="evalform" METHOD="get">
- Enter an expression:
- <TNPUT TYPE="text"NAME="expr"
SIZE=20>
- <BR>
- Result:
- <INPUT TYPE="text"NAME="result"
SIZE=15>
- <BR>
- <INPUT TYPE="button"NAME="Bottom1"
VALUE="Calculate"
- onClick="compute(this.form)">
- </FORM>
- </BODY>
- </HTML>
- 该 例 运 行 时 出 现 :
- Enter an expression: ______
- Result: ______
- Calculate
- 在 Enter an expression:栏 中 输 入 一 个 表 达
式 (如 22*3-6),然 后 点 击 Calculate按 钮 ,相
应 的 结 果 显 示 在 Result栏 内 (如 60)。
- 由 例 3源 代 码 和 运 行 结 果 可 以 看 出
:
- ① 在 HTML源 代 码 的 头 部 定 义 了 一 个
名 叫 compute的 函 数 ,其 形 式参 数 obj是 一
个 form(表 格 )。 当 用 户 输 入 表 达 式 后
,点 击 Calculate按 钮 ,由 此 触 发 的 事 件
处 理 程 序 onClick调 用 compute函 数 ,并 携
带 了 参 数 this.form,将 表 格 对 象 (由 <FORM>·
· · </FORM>定 义 )交 给 事 件 处
理 程 序 调 用 的 函 数 compute去 处 理 。
- 函 数 compute由 一 条 赋 值 语 句 构 成 ,其
右 部 是 JavaScript的 内 建 函数 eval,它 可 以
自 动 分 析 表 格 中 名 为 "expr"栏
内 的 输 入 字 符 串 ,计 算 出 其 值 ;计 算
出 的 结果 传 送 给 表 格 (form)中 名 为
"result"的 栏 内 ,这 样 ,在 屏 幕 上
Result:后 的 框 中 出 现 计 算 结 果 。
- 除 例 3中 出 现 的 JavaScript事 件 处 理 程
序 onClick,另 外 还 有 一 些 类似 程 序 ,包
括
on-Blur,onChange,onFocus,onLoad,on-MouseOver,onSelect,onSubmit,onUn-load等
。
-
(三 )
- JavaScript的 语 法 描 述
- (1)Navigator对 象
- 使 用 Navigator加 载 一 个 Web页 时 ,便 会 产
生 大 量 相 应 该 页 的 对 象供 JavaScript引
用 。 一 般 讲 ,每 个 Web页 有 以 下 对 象 :
- · 窗 口 :为 顶 级 对 象 ,含 有 Web页 整
个 窗 口 的 属 性 ;
- · URL属 性 :含 有 当 前 加 载 Web页 的
URL地 址 ;
- · 历 史 :含 有 当 前 Web页 之 前 所 访
问 的 URL地 址 ;
- · 文 档 :含 有 当 前 文 档 内 容 的 属
性 ,如 标 题 、 背 景 色 、 表 格 等 。
- 以 树 型 结 构 表 示 为 :
- window
- parent,frame,self,top
- location
- history
- document
- form-elements(text,fields,textarea,
- checkbox, password,...reset
- links
- anchors
- 引 用 对 象 时 采 用 如 下 形 式 (以 例 3为
例 ):
- document.evalform
- document.evalform.result
- document.evalform.Buttonl
- document.evalform.resule.value等 等 。
- 各 对 象 具 有 的 属 性 名 为 :
- document.evalform.method=get
- document.evalform.result.value=60(计 算 出 的 结 果
)
- document.evalform.result.length=15
- document.evalform.Buttonl.name=Buttonl
- document.evalform.Buttonl.value="Calculate"等
。
- 另 外 ,使 用 Navigator 2.x的 帧 (frame)结 构 ,可
以 在 一 个 Web页 构 成 多个 卷 动 的 帧 ,每
个 帧 指 向 不 同 的 URL,它 也 有 自 己 独
立 的 Navigator对 象 和 引 用 方 式 ,这 里就
不 详 细 介 绍 了 。
- (2)JavaScript的 值 、 名 字 、 常 量 、 表 达
式 级 运 算 符
- · JavaScript识 别 以 下 类 型 的 值
- 数 字 :如 36,3.1415926,-3.1E12等 ;
- 逻 辑 值 :如 true,false;
- 字 符 串 :如 "Hello!";
- null:指 定 null(空 值 )的 一 个 关 键 字 。
- · JavaScript应 用 中 可 以 建 立 变 量 ,供
用 户 使 用 和 引 用 。 变 量 名 以 字 母
或 下 划 线 开 头 ,后 跟 字 母 数 字 字 符
。
- · JavaScript识 别 的 表 达 式 分 为 计
算 算 术 值 、 字 符 串 值 及 逻 辑值 的
各 种 表 达 式 ,它 与 常 见 的 程 序 设 计
语 言 相 仿 。
- · JavaScript可 以 使 用 的 运 算 符 类
似 于 C语 言 ,包 括 算 术 运 算 符,如 +、 -、
*、 /、 %、 ++、 +=、 -=、 <<=等 ;位 运 算
符 ,如 &(与 )、 |(或 )、 ^(异 或 )、 <<(左
移 )、>>(右 移 )等 ;逻 辑 运 算 符 ,如
&&(与 )、 ||(或 )、 !(非 )等 ;串 运 算
符 ,如 +;关 系 及 比 较 运 算 符 ,如==、 !=、
<、 <=、 >、 >=等 。
- (3)JavaScript的 内 建 (Built-in)对 象
- JavaScript在 处 理 Web页 中 建 立 了 许 多 内
部 对 象 供 用 户 使 用 ,包 括 :
- · 字 符 串 对 象 :用 户 输 入 字 符 串
值 到 一 个 变 量 或 一 个 对 象 属性 中
去 时 ,便 会 产 生 一 个 字 符 串 对 象 ,供
JavaScript编 写 源 代 码 中 使 用 ;
- · 数 学 对 象 :数 学 函 数 在 JavaScript的
数 学 对 象 中 称 之 为 方 法 (method),包 括
,abs、 acos、 asin、 atan、 ceil、 cos、 exp、
floor、 log、 pow、 random、 round、 sin、sqrt、
tan等 。
- 另 一 类 数 学 函 数 在 JavaScript数 学 函 数
中 称 之 为 属 性 ,包 括 ,E、LN2、 LN10、
LOG2E、 LOG10E、 PI、 SQRT1_2、 SQRT2等 。
- · 日 期 对 象 :供 用 户 产 生 或 设 置
日 期 、 时 间 ,包 括 ,getDate、 getDay、
getHours、 getMinutes、 getMonth、 getSeconds、
getTime、 getTimeZoneOffset、 getYear、 parse、setDate、
setHours、 setMinutes、 setMonth、 set-Seconds、
setTime、 setYear等 。
- (4)JavaScript编 程 语 句
- JavaScript支 持 编 程 的 语 句 比 较 紧 凑 ,它
们 是 ,
- · 条 件 语 句
- if(条 件 ){ 语 句 串 1}
- [else{ 语 句 串 2}]
- }
- · 循 环 语 句
- ① for语 句
- for([初 值 表 达 式 ;][条 件 ;][增 量 表 达
式 ]){
- 语 句 串 }
- ② while语 句
- while(条 件 ){ 语 句 串 }
- ③ break语 句 和 continue语 句 :与 常 用 的 程
序 设 计 语 言 的 相 同 语 句 功 能 一 致
。
- · 对 象 监 控 语 句
- for(变 量 in对 象 ){ 语 句 串 }
- · new操 作 符
- 用 于 产 生 一 个 用 户 定 义 的 对 象 类
型 。
- 对 象 名 =new对 象 类 型 (参 数 1[,参 数 2]·
· · [,参 数 n])
- · with语 句
- with(对 象 ){ 语 句 串 }
- · 注 解
- 有 两 种 与 Java相 似 的 注 解 :
- ① 用 双 斜 杠 (∥ )放 在 一 行 的 行 首 ;
- ② 用 /*放 在 前 ,跨 多 注 解 行 后 以 */结
束 注 解 。
- · this关 键 词
- JavaScript引 用 this关 键 词 是 为 了 便 于 用
户 引 用 当 前 所 指 的 对 象 ,格 式 为 :
- this[.属 性 名 ]
- 加 属 性 名 后 是 指 当 前 对 象 的 某 一
属 性 。
-
(四 )
- 支 持 JavaScript的 公 司 级 浏 览 器
- 目 前 ,Netscape公 司 的 Navigator 2.0版 以 上 浏
览 器 具 有 处 理 JavaScript源 代 码 的 能 力
,最 新 的 版 本 是 Navigator 2.02及 Navigator 3.0
β 版 。 微 软 公 司 也 在 它的 Internet
Explorer 3.0 β 版 上 支 持 JavaScript。 近 日 将
有 一 些 公 司 发 行 与 JavaScript兼 容 的 浏
览 器 。
- Netscape及 Sun推 出 原 始 JavaScript发 行 版 时
都 声 称 有 大 约 30家 公 司 已 同 意 支 持
这 种 语 言 。 它 们 打 算 将 JavaScript提 交
W3C及 IETF组 织 ,作 为 Internet Script语 言 标
准 ,将 JavaScript作 为 一 种 开 放 的 、 无
版 权 的 标 准 用 于 Internet,这 意 味 着 任
何 公 司 在 它 们 的 产 品 中 可 以 自 由
地 开 发 使 用 JavaScript作 为 其 Web客 户 浏
览 器 。 微 软 公 司 是 除 Netscape公 司 外
的 首 家 将 JavaScript纳 入 其 浏 览 器 的 公
司 。
- JavaScript的 安 全 问 题
- 由 于 浏 览 器 本 身 允 许 用 户 查 看 浏
览 到 的 HTML文 档 的 源 代 码 ,采 用
JavaScript编 写 的 源 代 码 会 在 用 户 面 前
暴 露 无 遗 。 用 户 通 过 查 看 源 代 码 ,往
往 可 以 不费 力 地 发 现 正 确 输 入 用
户 名 和 口 令 登 录 的 代 码 ,或 是 找 到
有 关 输 入 之 后 源 代 码 中 要 加 载 的
URL地 址 。 用 户 使 用 该 URL地 址 完 全 可
以 绕 过 防 护 措 施 ,直 接 进 入 该 Web页
。
- 当 然 ,任 何 一 个 Internet标 准 都 不 可 能
声 称 自 己 有 100%的 安 全 性,JavaScript的 开
发 者 针 对 安 全 性 问 题 正 在 做 一 些
补 漏 工 作 ,如 Navigator 2.x已 解 决 了 伪 造E-mail/窃
取 E-mail地 址 的 问 题 。 Navigator 3.0正 在
致 力 于 既 允 许 使 用 JavaScript去 引 用 和
验证 用 户 口 令 输 入 ,又 要 防 止 不 怀
好 意 的 人 利 用 它 的 可 见 性 从 事 不
利 的 事 情 。
