精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 编程世界>>JavaScript 语 言 概 观 [转载]

主题:JavaScript 语 言 概 观 [转载]
发信人: alwaysliving(後生仔@核凸.粤黎越正)
整理人: jchao(2001-01-19 22:38:11), 站内信件
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.","
") 
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去 引 用 和
验证 用 户 口 令 输 入 ,又 要 防 止 不 怀 好 意 的 人 利 用 它 的 可 
见性 从 事 不 利 的 事 情 。 


----
冇用咖:讲出嚟都冇人知.
预咗啦:都冇人会睇啊!
搵食啫:睇下啦!唔睇?打祸甘嘅俾你啊!
犯法啊:打你就打你!

   

[关闭][返回]