2005/08/16 | javascript
类别(网页类学习笔记) | 评论(0) | 阅读(39) | 发表于 19:27
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去 引 用 和 验证 用 户 口 令 输 入 ,又 要 防 止 不 怀 好 意 的 人 利 用 它 的 可 见 性 从 事 不 利 的 事 情 。
0

评论Comments