欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript 實(shí)現(xiàn)

JavaScript 的核心 ECMAScript 描述了該語(yǔ)言的語(yǔ)法和基本對(duì)象;

DOM 描述了處理網(wǎng)頁(yè)內(nèi)容的方法和接口;

BOM 描述了與瀏覽器進(jìn)行交互的方法和接口。

ECMAScript、DOM 和 BOM

盡管 ECMAScript 是一個(gè)重要的標(biāo)準(zhǔn),但它并不是 JavaScript 唯一的部分,當(dāng)然,也不是唯一被標(biāo)準(zhǔn)化的部分。實(shí)際上,一個(gè)完整的 JavaScript 實(shí)現(xiàn)是由以下 3 個(gè)不同部分組成的:

JavaScript 包括 ECMAScript、DOM 和 BOM

ECMAScript

ECMAScript 并不與任何具體瀏覽器相綁定,實(shí)際上,它也沒有提到用于任何用戶輸入輸出的方法(這點(diǎn)與 C 這類語(yǔ)言不同,它需要依賴外部的庫(kù)來完成這類任務(wù))。那么什么才是 ECMAScript 呢?ECMA-262 標(biāo)準(zhǔn)(第 2 段)的描述如下:

“ECMAScript 可以為不同種類的宿主環(huán)境提供核心的腳本編程能力,因此核心的腳本語(yǔ)言是與任何特定的宿主環(huán)境分開進(jìn)行規(guī)定的... ...”

Web 瀏覽器對(duì)于 ECMAScript 來說是一個(gè)宿主環(huán)境,但它并不是唯一的宿主環(huán)境。事實(shí)上,還有不計(jì)其數(shù)的其他各種環(huán)境(例如 Nombas 的 ScriptEase,以及 Macromedia 同時(shí)用在 Flash 和 Director MX 中的 ActionScript)可以容納 ECMAScript 實(shí)現(xiàn)。那么 ECMAScript 在瀏覽器之外規(guī)定了些什么呢?

簡(jiǎn)單地說,ECMAScript 描述了以下內(nèi)容:

  • 語(yǔ)法
  • 類型
  • 語(yǔ)句
  • 關(guān)鍵字
  • 保留字
  • 運(yùn)算符
  • 對(duì)象

ECMAScript 僅僅是一個(gè)描述,定義了腳本語(yǔ)言的所有屬性、方法和對(duì)象。其他語(yǔ)言可以實(shí)現(xiàn) ECMAScript 來作為功能的基準(zhǔn),JavaScript 就是這樣:

ECMAScript、JavaScript、ActionScript、ScriptEase

每個(gè)瀏覽器都有它自己的 ECMAScript 接口的實(shí)現(xiàn),然后這個(gè)實(shí)現(xiàn)又被擴(kuò)展,包含了 DOM 和 BOM(在以下幾節(jié)中再探討)。當(dāng)然還有其他實(shí)現(xiàn)并擴(kuò)展了 ECMAScript 的語(yǔ)言,例如 Windows 腳本宿主(Windows Scripting Host, WSH)、Macromedia 在 Flash 和 Director MX 中的 ActionScript,以及 Nombas ScriptEase。

1. ECMAScript 的版本

ECMAScript 分成幾個(gè)不同的版本,它是在一個(gè)叫做 ECMA-262 的標(biāo)準(zhǔn)中定義的。和其他標(biāo)準(zhǔn)一樣,ECMA-262 會(huì)被編輯和更新。當(dāng)有了主要更新時(shí),就會(huì)發(fā)布一個(gè)標(biāo)準(zhǔn)的新版。最新 ECMA-262 的版本是 5.1,于 2011 年 6 月發(fā)布。

ECMA-262 的第一版在本質(zhì)上與 Netscape 的 JavaScript 1.1 是一樣,只是把所有與瀏覽器相關(guān)的代碼刪除了,此外還有一些小的調(diào)整。首先,ECMA-262 要求對(duì) Unicode 標(biāo)準(zhǔn)的支持(以便支持多語(yǔ)言)。第二,它要求對(duì)象是平臺(tái)無關(guān)的(Netscape 的 JavaScript 1.1 事實(shí)上有不同的對(duì)象實(shí)現(xiàn),例如 Date 對(duì)象,是依賴于平臺(tái))。這是 JavaScript 1.1 和 1.2 為什么不符合 ECMA-262 規(guī)范第一版的主要原因。

ECMA-262 的第二版大部分更新本質(zhì)上是編輯性的。這次標(biāo)準(zhǔn)的更新是為了與 ISO/IEC-16262 的嚴(yán)格一致,也并沒有特別添加、更改和刪除內(nèi)容。ECMAScript 一般不會(huì)遵守第二版。

ECMA-262 第三版是該標(biāo)準(zhǔn)第一次真正的更新。它提供了對(duì)字符串處理、錯(cuò)誤定義和數(shù)值輸出的更新。同時(shí),它還增加了正則表達(dá)式、新的控制語(yǔ)句、try...catch 異常處理的支持,以及一些為使標(biāo)準(zhǔn)國(guó)際化而做的小改動(dòng)。一般來說,它標(biāo)志著 ECMAScript 成為一種真正的編程語(yǔ)言。

2. 何謂 ECMAScript 符合性

在 ECMA-262 中,ECMAScript 符合性(conformance)有明確的定義。一個(gè)腳本語(yǔ)言必須滿足以下四項(xiàng)基本原則:

  • 符合的實(shí)現(xiàn)必須按照 ECMA-262 中所描述的支持所有的“類型、值、對(duì)象、屬性、函數(shù)和程序語(yǔ)言及語(yǔ)義”(ECMA-262,第一頁(yè))
  • 符合的實(shí)現(xiàn)必須支持 Unicode 字符標(biāo)準(zhǔn)(UCS)
  • 符合的實(shí)現(xiàn)可以增加沒有在 ECMA-262 中指定的“額外類型、值、對(duì)象、屬性和函數(shù)”。ECMA-262 將這些增加描述為規(guī)范中未給定的新對(duì)象或?qū)ο蟮男聦傩?/li>
  • 符合的實(shí)現(xiàn)可以支持沒有在 ECMA-262 中定義的“程序和正則表達(dá)式語(yǔ)法”(意思是可以替換或者擴(kuò)展內(nèi)建的正則表達(dá)式支持)

所有 ECMAScript 實(shí)現(xiàn)必須符合以上標(biāo)準(zhǔn)。

3. Web 瀏覽器中的 ECMAScript 支持

含有 JavaScript 1.1 的 Netscape Navigator 3.0 在 1996 年發(fā)布。然后,JavaScript 1.1 規(guī)范被作為一個(gè)新標(biāo)準(zhǔn)的草案被提交給 EMCA。有了 JavaScript 轟動(dòng)性的流行,Netscape 十分高興地開始開發(fā) 1.2 版。但有一個(gè)問題,ECMA 并未接受 Netscape 的草案。在 Netscape Navigator 3.0 發(fā)布后不久,微軟就發(fā)布了 IE 3.0。該版本的 IE 含有 JScript 1.0(微軟自己的 JavaScript 實(shí)現(xiàn)的名稱),原本計(jì)劃可以與 JavaScript 1.1 相提并論。然后,由于文檔不全以及一些不當(dāng)?shù)闹貜?fù)特性,JScript 1.0 遠(yuǎn)遠(yuǎn)沒有達(dá)到 JavaScript 1.1 的水平。

在 ECMA-262 第一版定稿之前,發(fā)布含有 JavaScript 1.2 的 Netscape Navigator 4.0 是在 1997 年,在那年晚些時(shí)候,ECMA-262 標(biāo)準(zhǔn)被接受并標(biāo)準(zhǔn)化。因此,JavaScript 1.2 并不和 ECMAScript 的第一版兼容,雖然 ECMAScript 應(yīng)該基于 JavaScript 1.1。

JScript 的下一步是 IE 4.0 中加入的 JScript 3.0(2.0 版是隨 IIS 3.0 一起發(fā)布的,但并未包含在瀏覽器中)。微軟大力宣傳 JScript 3.0 是世界上第一個(gè)真正符合 ECMA 標(biāo)準(zhǔn)的腳本語(yǔ)言。而那時(shí),ECMA-262 還沒有最終定稿,所以 JScript 3.0 也遭受了和 JavaScript 1.2 同樣的命運(yùn) - 它還是沒能符合最終的 ECMAScript 標(biāo)準(zhǔn)。

Netscape 選擇在 Netscape Navigator 4.06 中升級(jí)它的 JavaScript 實(shí)現(xiàn)。JavaScript 1.3 使 Netscape 終于完全符合了 ECMAScript 第一版。Netscape 加入了對(duì) Unicode 標(biāo)準(zhǔn)的支持,并讓所有的對(duì)象保留了在 JavaScript 1.2 中引入的新特性的同時(shí)實(shí)現(xiàn)了平臺(tái)獨(dú)立。

當(dāng) Netscape 將它的源代碼作為 Mozilla 項(xiàng)目公布于眾時(shí),本來計(jì)劃 JavaScript 1.4 將會(huì)嵌入到 Netscape Navigator 5.0 中。然而,一個(gè)冒進(jìn)的決定 - 要完全從頭重新設(shè)計(jì) Netscape 的代碼,破壞了這個(gè)工作。JavaScript 1.4 僅僅作為一個(gè) Netscape Enterprise Server 的服務(wù)器端腳本語(yǔ)言發(fā)布,以后也沒有被放入瀏覽器中。

如今,所有主流的 Web 瀏覽器都遵守 ECMA-262 第三版。

下面的表格列出了大部分流行的 Web 瀏覽器中的 ECMAScript 支持:

瀏覽器 DOM 兼容性
Netscape Navigator 2.0 -
Netscape Navigator 3.0 -
Netscape Navigator 4.0 - 4.05 -
Netscape Navigator 4.06 - 4.79 Edition 1
Netscape 6.0+ (Mozilla 0.6.0+) Edition 3
Internet Explorer 3.0 -
Internet Explorer 4.0 -
Internet Explorer 5.0 Edition 1
Internet Explorer 5.5+ Edition 3
Opera 6.0 - 7.1 Edition 2
Opera 7.2+ Edition 3
Safari 1.0+/Konqueror ~ 2.0+ Edition 3

DOM

DOM(文檔對(duì)象模型)是 HTML 和 XML 的應(yīng)用程序接口(API)。DOM 將把整個(gè)頁(yè)面規(guī)劃成由節(jié)點(diǎn)層級(jí)構(gòu)成的文檔。HTML 或 XML 頁(yè)面的每個(gè)部分都是一個(gè)節(jié)點(diǎn)的衍生物。請(qǐng)考慮下面的 HTML 頁(yè)面:

<html>
  <head>
    <title>Sample Page</title>
  </head>
  <body>
    <p>hello world!</p>
  </body>
</html>

這段代碼可以用 DOM 繪制成一個(gè)節(jié)點(diǎn)層次圖:

DOM 節(jié)點(diǎn)層次圖

DOM 通過創(chuàng)建樹來表示文檔,從而使開發(fā)者對(duì)文檔的內(nèi)容和結(jié)構(gòu)具有空前的控制力。用 DOM API 可以輕松地刪除、添加和替換節(jié)點(diǎn)。

1. 為什么 DOM 必不可少

自從 IE 4.0 和 Netscape Navigator 4.0 開始支持不同形態(tài)的動(dòng)態(tài) HTML(DHTML),開發(fā)者首次能夠在不重載網(wǎng)頁(yè)的情況下修改它的外觀和內(nèi)容。這是 Web 技術(shù)的一大飛躍,不過也帶來了巨大的問題。Netscape 和微軟各自開發(fā)自己的 DHTML,從而結(jié)束了 Web 開發(fā)者只編寫一個(gè) HTML 頁(yè)面就可以在所有瀏覽器中訪問的時(shí)期。

業(yè)界決定必須要做點(diǎn)什么以保持 Web 的跨平臺(tái)特性,他們擔(dān)心如果放任 Netscape 和微軟公司這樣做,Web 必將分化為兩個(gè)獨(dú)立的部分,每一部分只適用于特定的瀏覽器。因此,負(fù)責(zé)指定 Web 通信標(biāo)準(zhǔn)的團(tuán)體 W3C(World Wide Web Consortium)就開始制定 DOM。

2. DOM 的各個(gè) level

DOM Level 1 是 W3C 于 1998 年 10 月提出的。它由兩個(gè)模塊組成,即 DOM Core 和 DOM HTML。前者提供了基于 XML 的文檔的結(jié)構(gòu)圖,以便訪問和操作文檔的任意部分;后者添加了一些 HTML 專用的對(duì)象和方法,從而擴(kuò)展了 DOM Core。

注意,DOM 不是 JavaScript 專有的,事實(shí)上許多其他語(yǔ)言都實(shí)現(xiàn)了它。不過,Web 瀏覽器中的 DOM 已經(jīng)用 ECMAScript 實(shí)現(xiàn)了,現(xiàn)在是 JavaScript 語(yǔ)言的一個(gè)很大組成部分。

DOM Level 1 只是一個(gè)目標(biāo),即規(guī)劃文檔的結(jié)構(gòu),DOM Level 2 的目標(biāo)就廣泛多了。對(duì)原始 DOM 的擴(kuò)展添加了對(duì)鼠標(biāo)和用戶界面事件(DHTML 對(duì)此有豐富的支持)、范圍、遍歷(重復(fù)執(zhí)行 DOM 文檔的方法)的支持,并通過對(duì)象接口添加了對(duì) CSS(層疊樣式表)的支持。由 Level 1 引入的原始 DOM Core 也加入了對(duì) XML 命名空間的支持。

DOM Level 2 引入了幾種 DOM 新模塊,用于處理新的接口類型:

  • DOM 視圖 - 描述跟蹤文檔的各種視圖(即 CSS 樣式化之前和 CSS 樣式化之后的文檔)
  • DOM 事件 - 描述事件的接口
  • DOM 樣式 - 描述處理基于 CSS 樣式的接口
  • DOM 遍歷和范圍 - 描述遍歷和操作文檔樹的接口

DOM Level 3 引入了以統(tǒng)一的方式載入和保持文檔的方法(包含在新模塊 DOM Load and Save)以及驗(yàn)證文檔(DOM Validation)的方法,從而進(jìn)一步擴(kuò)展了 DOM。在 Level 3 中,DOM Core 被擴(kuò)展為支持所有的 XML 1.0 特性,包括 XML Infoset、XPath 和 XML Base。

在學(xué)習(xí) DOM 時(shí),可能會(huì)遇到有人引用 DOM Level 0。注意,根本沒有 DOM Level 0 這個(gè)標(biāo)準(zhǔn),它只是 DOM 的一個(gè)歷史參考點(diǎn)(DOM Level 0 指的是 IE 4.0 和 Netscape Navigator 4.0 中支持的原始 DHTML)。

3. 其他 DOM

除了 DOM Core 和 DOM HTML 外,還有其他幾種語(yǔ)言發(fā)布了自己的 DOM 標(biāo)準(zhǔn)。這些語(yǔ)言都是基于 XML 的,每種 DOM 都給對(duì)應(yīng)語(yǔ)言添加了特有的方法和接口:

  • 可縮放矢量語(yǔ)言(SVG)1.0
  • 數(shù)字標(biāo)記語(yǔ)言(MathML)1.0
  • 同步多媒體集成語(yǔ)言(SMIL)

注釋:如果希望學(xué)習(xí)更多相關(guān)內(nèi)容,請(qǐng)?jiān)L問 w3school 的 SMIL 教程SVG 教程。

此外,其他語(yǔ)言也開發(fā)了自己的 DOM 實(shí)現(xiàn),如 Mozilla 的 XML 用戶界面語(yǔ)言(XUL)。不過,只有上面列出的幾種語(yǔ)言是 W3C 的推薦標(biāo)準(zhǔn)。

4. Web 瀏覽器中的 DOM 支持

DOM 在被 Web 瀏覽器開始實(shí)現(xiàn)之前就已經(jīng)是一種標(biāo)準(zhǔn)了。IE 首次嘗試 DOM 是在 5.0 版本中,不過其實(shí)直到 5.5 版本之后才具有真正的 DOM 支持,IE 5.5 實(shí)現(xiàn)了 DOM Level 1。從那時(shí)起,IE 就沒有引入新的 DOM 功能。

Netscape 直到 Netscape 6(Mozilla 0.6.0)才引入 DOM 支持。目前,Mozilla 具有最好的 DOM 支持,實(shí)現(xiàn)了完整的 Level 1、幾乎所有 Level 2 以及一部分 Level 3。(Mozilla 開發(fā)小組的目標(biāo)是構(gòu)造一個(gè)與標(biāo)準(zhǔn) 100% 兼容的瀏覽器,他們的工作得到了回報(bào)。)

Opera 直到 7.0 版本才加入 DOM 支持,還有 Safari 也實(shí)現(xiàn)了大部分 DOM Level 1。它們幾乎都與 IE 5.5 處于同一水平,有些情況下,甚至超過了 IE 5.5。不過,就對(duì) DOM 的支持而論,所有瀏覽器都遠(yuǎn)遠(yuǎn)落后于 Mozilla。下表列出了常用瀏覽器對(duì) DOM 的支持。

瀏覽器 DOM 兼容性
Netscape Navigator 1.0 - 4.x -
Netscape 6.0+ (Mozilla 0.6.0+) Level 1、Level 2、Level 3(部分)
IE 2.0 - 4.x -
IE 5.0 Level 1(最�。�
IE 5.5+ Level 1(幾乎全部)
Opera 1.0 - 6.0 -
Opera 7.0+ Level 1(幾乎全部)、Level 2 (部分)
Safari 1.0+/Konqueror ~ 2.0+ Level 1

注釋:如果希望進(jìn)一步地學(xué)習(xí) DOM 的知識(shí),請(qǐng)?jiān)L問 w3school 的 HTML DOM 教程XML DOM 教程。

BOM

IE 3.0 和 Netscape Navigator 3.0 提供了一種特性 - BOM(瀏覽器對(duì)象模型),可以對(duì)瀏覽器窗口進(jìn)行訪問和操作。使用 BOM,開發(fā)者可以移動(dòng)窗口、改變狀態(tài)欄中的文本以及執(zhí)行其他與頁(yè)面內(nèi)容不直接相關(guān)的動(dòng)作。使 BOM 獨(dú)樹一幟且又常常令人懷疑的地方在于,它只是 JavaScript 的一個(gè)部分,沒有任何相關(guān)的標(biāo)準(zhǔn)。

BOM 主要處理瀏覽器窗口和框架,不過通常瀏覽器特定的 JavaScript 擴(kuò)展都被看做 BOM 的一部分。這些擴(kuò)展包括:

  • 彈出新的瀏覽器窗口
  • 移動(dòng)、關(guān)閉瀏覽器窗口以及調(diào)整窗口大小
  • 提供 Web 瀏覽器詳細(xì)信息的定位對(duì)象
  • 提供用戶屏幕分辨率詳細(xì)信息的屏幕對(duì)象
  • 對(duì) cookie 的支持
  • IE 擴(kuò)展了 BOM,加入了 ActiveXObject 類,可以通過 JavaScript 實(shí)例化 ActiveX 對(duì)象

由于沒有相關(guān)的 BOM 標(biāo)準(zhǔn),每種瀏覽器都有自己的 BOM 實(shí)現(xiàn)。有一些事實(shí)上的標(biāo)準(zhǔn),如具有一個(gè)窗口對(duì)象和一個(gè)導(dǎo)航對(duì)象,不過每種瀏覽器可以為這些對(duì)象或其他對(duì)象定義自己的屬性和方法。

參閱: