JavaScript 语 言 概 观
- 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去 引 用 和 验证
用 户 口 令 输 入 ,又 要 防 止 不 怀 好 意 的 人 利 用 它 的 可 见
性 从 事 不 利 的 事 情 。
Next-->page>>回上一页,看更多资料