理解JavaScript (轉載自W3CSchool)

來源:互聯網
上載者:User
文章目錄
  • 1. ECMAScript 的版本
  • 2. 何謂 ECMAScript 符合性
  • 3. 網頁瀏覽器中的 ECMAScript 支援
  • 1. 為什麼 DOM 必不可少
  • 2. DOM 的各個 level
  • 3. 其他 DOM
  • 4. 網頁瀏覽器中的 DOM 支援
  • 參閱:

JavaScript 的核心 ECMAScript 描述了該語言的文法和基本對象;

DOM 描述了處理網頁內容的方法和介面;

BOM 描述了與瀏覽器進行互動的方法和介面。

ECMAScript、DOM 和 BOM

儘管 ECMAScript 是一個重要的標準,但它並不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:

  • 核心(ECMAScript)
  • 文件物件模型(DOM)
  • 瀏覽器物件模型(BOM)

ECMAScript

ECMAScript 並不與任何具體瀏覽器相綁定,實際上,它也沒有提到用於任何使用者輸入輸出的方法(這點與 C 這類語言不同,它需要依賴外部的庫來完成這類任務)。那麼什麼才是 ECMAScript 呢?ECMA-262 標準(第 2 段)的描述如下:

ECMAScript 可以為不同種類的宿主環境提供核心的指令碼編程能力,因此核心的指令碼語言是與任何特定的宿主環境分開進行規定的... ...”

網頁瀏覽器對於 ECMAScript 來說是一個宿主環境,但它並不是唯一的宿主環境。事實上,還有不計其數的其他各種環境(例如 Nombas 的 ScriptEase,以及 Macromedia 同時用在 Flash 和 Director MX 中的 ActionScript)可以容納 ECMAScript 實現。那麼 ECMAScript 在瀏覽器之外規定了些什麼呢?

簡單地說,ECMAScript 描述了以下內容:

  • 文法
  • 類型
  • 語句
  • 關鍵字
  • 保留字
  • 運算子
  • 對象

ECMAScript 僅僅是一個描述,定義了指令碼語言的所有屬性、方法和對象。其他語言可以實現 ECMAScript 來作為功能的基準,JavaScript 就是這樣:

每個瀏覽器都有它自己的 ECMAScript 介面的實現,然後這個實現又被擴充,包含了 DOM 和 BOM(在以下幾節中再探討)。當然還有其他實現並擴充了 ECMAScript 的語言,例如 Windows 指令碼宿主(Windows Scripting Host, WSH)、Macromedia 在 Flash 和 Director MX 中的 ActionScript,以及 Nombas ScriptEase。

1. ECMAScript 的版本

ECMAScript 分成幾個不同的版本,它是在一個叫做 ECMA-262 的標準中定義的。和其他標準一樣,ECMA-262 會被編輯和更新。當有了主要更新時,就會發布一個標準的新版。最新 ECMA-262 的版本是第三版,於 1999 年 12 月發布。

ECMA-262 的第一版在本質上與 Netscape 的 JavaScript 1.1 是一樣,只是把所有與瀏覽器相關的代碼刪除了,此外還有一些小的調整。首先,ECMA-262 要求對 Unicode 標準的支援(以便支援多語言)。第二,它要求對象是平台無關的(Netscape 的 JavaScript 1.1 事實上有不同的對象實現,例如 Date 對象,是依賴於平台)。這是 JavaScript 1.1 和 1.2 為什麼不符合 ECMA-262 規範第一版的主要原因。

ECMA-262 的第二版大部分更新本質上是編輯性的。這次標準的更新是為了與 ISO/IEC-16262 的嚴格一致,也並沒有特別添加、更改和刪除內容。ECMAScript 一般不會遵守第二版。

ECMA-262 第三版是該標準第一次真正的更新。它提供了對字串處理、錯誤定義和數值輸出的更新。同時,它還增加了Regex、新的控制語句、try...catch 異常處理的支援,以及一些為使標準國際化而做的小改動。一般來說,它標誌著 ECMAScript 成為一種真正的程式設計語言。

2. 何謂 ECMAScript 符合性

在 ECMA-262 中,ECMAScript 符合性(conformance)有明確的定義。一個指令碼語言必須滿足以下四項基本原則:

  • 符合的實現必須按照 ECMA-262 中所描述的支援所有的“類型、值、對象、屬性、函數和程式語言及語義”(ECMA-262,第一頁)
  • 符合的實現必須支援 Unicode 字元標準(UCS)
  • 符合的實現可以增加沒有在 ECMA-262 中指定的“額外類型、值、對象、屬性和函數”。ECMA-262 將這些增加描述為規範中未給定的新對象或對象的新屬性
  • 符合的實現可以支援沒有在 ECMA-262 中定義的“程式和Regex文法”(意思是可以替換或者擴充內建的Regex支援)

所有 ECMAScript 實現必須符合以上標準。

3. 網頁瀏覽器中的 ECMAScript 支援

含有 JavaScript 1.1 的 Netscape Navigator 3.0 在 1996 年發布。然後,JavaScript 1.1 規範被作為一個新標準的草案被提交給 EMCA。有了 JavaScript 轟動性的流行,Netscape 十分高興地開始開發 1.2 版。但有一個問題,ECMA 並未接受 Netscape 的草案。在 Netscape Navigator 3.0 發布後不久,微軟就發布了 IE 3.0。該版本的 IE 含有 JScript 1.0(微軟自己的 JavaScript
實現的名稱),原本計劃可以與 JavaScript 1.1 相提並論。然後,由於文檔不全以及一些不當的重複特性,JScript 1.0 遠遠沒有達到 JavaScript 1.1 的水平。

在 ECMA-262 第一版定稿之前,發布含有 JavaScript 1.2 的 Netscape Navigator 4.0 是在 1997 年,在那年晚些時候,ECMA-262 標準被接受並標準化。因此,JavaScript 1.2 並不和 ECMAScript 的第一版相容,雖然 ECMAScript 應該基於 JavaScript 1.1。

JScript 的下一步是 IE 4.0 中加入的 JScript 3.0(2.0 版是隨 IIS 3.0 一起發布的,但並未包含在瀏覽器中)。微軟大力宣傳 JScript 3.0 是世界上第一個真正符合 ECMA 標準的指令碼語言。而那時,ECMA-262 還沒有最終定稿,所以 JScript 3.0 也遭受了和 JavaScript 1.2 同樣的命運 - 它還是沒能符合最終的 ECMAScript 標準。

Netscape 選擇在 Netscape Navigator 4.06 中升級它的 JavaScript 實現。JavaScript 1.3 使 Netscape 終於完全符合了 ECMAScript 第一版。Netscape 加入了對 Unicode 標準的支援,並讓所有的對象保留了在 JavaScript 1.2 中引入的新特性的同時實現了平台獨立。

當 Netscape 將它的原始碼作為 Mozilla 項目公佈於眾時,本來計劃 JavaScript 1.4 將會嵌入到 Netscape Navigator 5.0 中。然而,一個冒進的決定 - 要完全從頭重新設計 Netscape 的代碼,破壞了這個工作。JavaScript 1.4 僅僅作為一個 Netscape Enterprise Server 的伺服器端指令碼語言發布,以後也沒有被放入瀏覽器中。

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

下面的表格列出了大部分流行的 網頁瀏覽器中的 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(文件物件模型)是 HTML 和 XML 的應用程式介面(API)。DOM 將把整個頁面規劃成由節點層級構成的文檔。HTML 或 XML 頁面的每個部分都是一個節點的衍生物。請考慮下面的 HTML 頁面:

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

這段代碼可以用 DOM 繪製成一個節點層次圖:

DOM 通過建立樹來表示文檔,從而使開發人員對文檔的內容和結構具有空前的控制力。用 DOM API 可以輕鬆地刪除、添加和替換節點。

1. 為什麼 DOM 必不可少

自從 IE 4.0 和 Netscape Navigator 4.0 開始支援不同形態的動態超文字標記語言(DHTML),開發人員首次能夠在不重載網頁的情況下修改它的外觀和內容。這是 Web 技術的一大飛躍,不過也帶來了巨大的問題。Netscape 和微軟各自開發自己的 DHTML,從而結束了 Web 開發人員只編寫一個 HTML 頁面就可以在所有瀏覽器中訪問的時期。

業界決定必須要做點什麼以保持 Web 的跨平台特性,他們擔心如果放任 Netscape 和微軟公司這樣做,Web 必將分化為兩個獨立的部分,每一部分只適用於特定的瀏覽器。因此,負責指定 Web 通訊標準的團體 W3C(World Wide Web Consortium)就開始制定 DOM。

2. DOM 的各個 level

DOM Level 1 是 W3C 於 1998 年 10 月提出的。它由兩個模組組成,即 DOM Core 和 DOM HTML。前者提供了基於 XML 的文檔的結構圖,以便訪問和操作文檔的任意部分;後者添加了一些 HTML 專用的對象和方法,從而擴充了 DOM Core。

注意,DOM 不是 JavaScript 專有的,事實上許多其他語言都實現了它。不過,網頁瀏覽器中的 DOM 已經用 ECMAScript 實現了,現在是 JavaScript 語言的一個很大組成部分。

DOM Level 1 只是一個目標,即規劃文檔的結構,DOM Level 2 的目標就廣泛多了。對原始 DOM 的擴充添加了對滑鼠和使用者介面事件(DHTML 對此有豐富的支援)、範圍、遍曆(重複執行 DOM 文檔的方法)的支援,並通過對象介面添加了對 CSS(層疊樣式表)的支援。由 Level 1 引入的原始 DOM Core 也加入了對 XML 命名空間的支援。

DOM Level 2 引入了幾種 DOM 新模組,用於處理新的介面類型:

  • DOM 視圖 - 描述跟蹤文檔的各種視圖(即 CSS 樣式化之前和 CSS 樣式化之後的文檔)
  • DOM 事件 - 描述事件的介面
  • DOM 樣式 - 描述處理基於 CSS 樣式的介面
  • DOM 遍曆和範圍 - 描述遍曆和操作文檔樹的介面

DOM Level 3 引入了以統一的方式載入和保持文檔的方法(包含在新模組 DOM Load and Save)以及驗證文檔(DOM Validation)的方法,從而進一步擴充了 DOM。在 Level 3 中,DOM Core 被擴充為支援所有的 XML 1.0 特性,包括 XML Infoset、XPath 和 XML Base。

在學習 DOM 時,可能會遇到有人引用 DOM Level 0。注意,根本沒有 DOM Level 0 這個標準,它只是 DOM 的一個曆史參考點(DOM Level 0 指的是 IE 4.0 和 Netscape Navigator 4.0 中支援的原始 DHTML)。

3. 其他 DOM

除了 DOM Core 和 DOM HTML 外,還有其他幾種語言發布了自己的 DOM 標準。這些語言都是基於 XML 的,每種 DOM 都給對應語言添加了特有的方法和介面:

  • 可縮放向量語言(SVG)1.0
  • 數字標記語言(MathML)1.0
  • 同步多媒體整合語言(SMIL)

注釋:如果希望學習更多相關內容,請訪問 w3school 的
SMIL 教程 和 SVG 教程。

此外,其他語言也開發了自己的 DOM 實現,如 Mozilla 的 XML 使用者介面語言(XUL)。不過,只有上面列出的幾種語言是 W3C 的推薦標準。

4. 網頁瀏覽器中的 DOM 支援

DOM 在被 網頁瀏覽器開始實現之前就已經是一種標準了。IE 首次嘗試 DOM 是在 5.0 版本中,不過其實直到 5.5 版本之後才具有真正的 DOM 支援,IE 5.5 實現了 DOM Level 1。從那時起,IE 就沒有引入新的 DOM 功能。

Netscape 直到 Netscape 6(Mozilla 0.6.0)才引入 DOM 支援。目前,Mozilla 具有最好的 DOM 支援,實現了完整的 Level 1、幾乎所有 Level 2 以及一部分 Level 3。(Mozilla 開發小組的目標是構造一個與標準 100% 相容的瀏覽器,他們的工作得到了回報。)

Opera 直到 7.0 版本才加入 DOM 支援,還有 Safari 也實現了大部分 DOM Level 1。它們幾乎都與 IE 5.5 處於同一水平,有些情況下,甚至超過了 IE 5.5。不過,就對 DOM 的支援而論,所有瀏覽器都遠遠落後於 Mozilla。下表列出了常用瀏覽器對 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 (部分)
Safari 1.0+/Konqueror ~ 2.0+ Level 1

注釋:如果希望進一步地學習 DOM 的知識,請訪問 w3school 的
HTML DOM 教程 和
XML DOM 教程。

BOM

IE 3.0 和 Netscape Navigator 3.0 提供了一種特性 - BOM(瀏覽器物件模型),可以對瀏覽器視窗進行訪問和操作。使用 BOM,開發人員可以移動視窗、改變狀態列中的文本以及執行其他與頁面內容不直接相關的動作。使 BOM 獨樹一幟且又常常令人懷疑的地方在於,它只是 JavaScript 的一個部分,沒有任何相關的標準

BOM 主要處理瀏覽器視窗和架構,不過通常瀏覽器特定的 JavaScript 擴充都被看做 BOM 的一部分。這些擴充包括:

  • 彈出新的瀏覽器視窗
  • 移動、關閉瀏覽器視窗以及調整視窗大小
  • 提供 網頁瀏覽器詳細資料的定位對象
  • 提供使用者螢幕解析度詳細資料的螢幕對象
  • 對 cookie 的支援
  • IE 擴充了 BOM,加入了 ActiveXObject 類,可以通過 JavaScript 執行個體化 ActiveX 對象

由於沒有相關的 BOM 標準,每種瀏覽器都有自己的 BOM 實現。有一些事實上的標準,如具有一個視窗對象和一個導航對象,不過每種瀏覽器可以為這些對象或其他對象定義自己的屬性和方法。

參閱:
  • Window 對象
  • Navigator 對象
  • Screen 對象
  • History 對象
  • Location 對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.