第一章 JavaScript簡介《JavaScript高級程序設計》

本系列文章是《JavaScript高級程序設計》(第二版) 中文 的縮水版,但願經過對書籍內容的轉述,一方面能加深本身對於JavaScript的理解,另外一方面也能讓其餘人學習瞭解JavaScript這門語言。若有不對的地方,請指正,我會在第一時間進行更改。如需轉載請註明出處。 html

1.1 JavaScript 簡史(選讀) 前端

    JavaScript 誕生於1995年,最初由 Netscape 公司的 布蘭登・艾奇 程序員

(Brendan Eich)負責開發,命名爲LiveScript(它在服務器上的名字叫LiveWire )。爲了加快開發進度,Netscape 與 Sun 公司創建了一個開發聯盟。在正式發佈前夕,Netscape 爲了搭上媒體熱炒 Java 的順風車,臨時把 LiveScript 更名爲 JavaScript 。JavaScript 是種嵌入式腳本語言,運行在該公司的 Navigator 瀏覽器上(年紀大的人都記得,當時這款瀏覽器很牛X的)。 正則表達式

    JavaScript 取得巨大成功後,微軟爲了與 Navigator 競爭,也向自家IE瀏覽器加入了名爲 JScript 的 JavaScript 實現(命名爲 JScript 是爲了避開與 Netscape 有關的受權問題)。 數據庫

    1992年先後,一家名爲 Nombas 的公司開發了一種嵌入式腳本語言,並將其命名爲 C-minus-minus(簡稱 Cmm)。這個腳本語言被打包到共享軟件CEnvi中。以後,該公司把 Cmm 更名爲 ScriptEase 。在 Netscape Navigator 受到人們狂熱追捧之際,Nombas 公司開發了可以嵌入到網頁中的 CEnvi版本。而這種嵌入 CEnvi的早起試驗性網頁被叫作 Espresso Pages(濃咖啡版網頁),它們是在萬維網上首次使用腳本語言的標誌。這種在網頁中嵌入腳本的思想很大程度上影響了以後 JavaScript 的誕生 和 因特網將來的發展。 編程

    微軟推出其 JavaScript 實現意味着有了3個不一樣的 JavaScript 版本:Netscape Navigator 中的JavaScript 、IE 中的 Jscript 和 ScriptEase 中的 CEnvi。 瀏覽器

    爲了解決標準不統一的問題,1997年,以 JavaScript 1.1 爲藍本的建議被提交給了歐洲計算機制造商協會。該協會指定 39 號技術委員會(TC39,Technical Committee #39 )負責 「標準化一種通用、跨平臺、供應商中立的腳本語言的語法和語義」。TC39 由來自 Netscape、Sun、微軟、Borland 及其餘關注腳本語言發展的公司的程序員組成,他們通過數月的努力完成了 ECMA-262 —— 定義一種名爲 ECMAScript 的新腳本語言的標準。 服務器

    1998年,ISO/IEC 也採用了 ECMAScript 做爲標準(即 ISO/IEC-16262)。自此,瀏覽器開發商就開始致力於將 ECMAScript 做爲各自 JavaScript 實現的基礎,也在不一樣程度上取得了成功。 cookie

1.2 JavaScript 實現 數據結構

    雖然 JavaScript 和 ECMAScript 一般都被人們用來表達相同的含義,但 JavaScript 的含義卻比 ECMA-262 中規定的要多得多。沒錯,一個完整的 JavaScript 實現應該由下列三個不一樣的部分組成:


1.2.1 ECMAScript

    ECMA-262 標準規定了這門語言的下列組成部分:

 (1)語法

(2)類型

(3)語句

(4)關鍵字

(5)保留字

(6)操做符

(7)對象

    ECMAScript 就是對實現該標準規定的各個方面內容的語言的描述。JavaScript 、Adobe ActionScript 和OpenView ScriptEase 都實現了ECMAScript。

  1. ECMAScript 的版本(選讀)

    ECMA-262 第 1 版:本質上與 Netscape 的 JavaScript 1.1 相同——只不過刪除了全部針對瀏覽器的代碼並做了一些小改動:ECMA-262 要求支持 Unicode 標準(從而支持多語言開發),並且對象也變成了平臺無關的(Netscape JavaScript 1.1 的對象在不一樣平臺中的實現不同,例如 Date 對象)。這也是 JavaScript 1.1和 1.2 與 ECMA-262 第 1 版不一致的緣由。

    ECMA-262 第 2 版:主要是編輯加工的結果。這一版中內容的更新是爲了與 ISO/IEC-16262 保持嚴格一致,沒有做任何新增、修改或刪節處理。所以,通常不是用 第 2 版來衡量 ECMAScript 實現的兼容性。

    ECMA-262 第 3 版:這一版纔是對該標準第一次真正的修改。修改的內容涉及字符串處理、錯誤定義和數值輸出。並且還新增了對正則表達式、新控制語句、try-catch 異常處理的支持,並圍繞標準的國際化作出了一些小的修改。從各方面綜合來看,第 3 版標誌着 ECMAScript 成爲了一門真正的編程語言。

    ECMA-262 第 4 版:這一版對這門語言進行了一次全面的檢核修訂。因爲 JavaScript 在 Web 上日益流行,開發人員紛紛建議修訂 ECMAScript,以使其可以知足不斷增加的 Web 開發需求。做爲迴應,ECMA TC39 從新召集相關人員共同謀劃這門語言的將來。結果,出臺後的標準幾乎在第 3 版基礎上徹底定義了一門新語言。第 4 版不只包含了強類型變量,心語句和新數據結構、真正的類和經典繼承,還定義了與數據庫交互的新方式(之後會有討論)。

    與此同時,TC39 下屬的一個小組也提出了一個名爲 ECMAScript 3.1 的替代性建議,該建議只對這門語言進行了較少的改進。這個小組認爲第 4 版給這門語言帶來的跨越太大了。所以,該小組建議對這門語言進行小幅修訂。

    2.什麼是 ECMAScript 兼容(選讀)

    ECMA-262 給出了 ECMAScript 兼容的定義。要想成爲 ECMAScript 的實現,則該實現必須作到:

    (1)支持 ECMA-262 描述的全部 「 類型、值、對象、屬性、函數以及程序句法和語義 」( ECMA-262 第一頁 );

    (2)支持 Unicode 字符標準。

    此外,兼容的實現還能夠進行下列擴展。

    (3)添加 ECMA-262 沒有描述的 「 更多類型、值、對象、屬性和函數 」。ECMA-262 所說的這些新特性,主要是指該標準中沒有規定的新對象的新屬性。

    (4)支持 ECMA-262 沒有定義的 「 程序和正則表達式語法 」。(也就是說,能夠修改和擴展內置的正則表達式語法。

    上述要求爲兼容實現的開發人員基於 ECMAScript 開發一門新語言提供了廣闊的空間和極大的靈活性,這樣也從另外一個側面說明了 ECMAScript 受開發人員歡迎的緣由。

    3.Web 瀏覽器對 ECMAScript 的支持

    

    1.2.2 文檔對象模型( DOM )

    文檔對象模型(DOM,Document Object Model)是針對 XML 但通過擴展用於 HTML 的應用程序編程接口(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

    在 IE4 和 Netscape Navigator 4 分別支持的不一樣形式的 DHTML(Dynamic HTML)基礎上,開發人員首次無需從新加載網頁,就能夠修改其外觀和內容了。


    2.DOM 級別 (選讀)

    DOM1 級(DOM Level 1)於 1998年10月 成爲 W3C(World Wide Web Consortium,萬維網聯盟,負責制定 Web 通訊標準 )的推薦標準。DOM1 級由兩個模塊組成:DOM核心(DOM Core)和 DOM HTML。其中,DOM核心規定的是如何映射基於 XML 的文檔結構,以便簡化對文檔中任意部分的訪問和操做。DOM HTML 模塊則在 DOM 核心的基礎上加以擴展,添加了針對 HTML 的對象和方法。

    請讀者注意,DOM 並不僅是針對 JavaScript 的,不少別的語言也都實現了 DOM。不過,在Web瀏覽器中,基於 ECMAScript 實現的 DOM 的確已經成爲 JavaScript 這門語言的一個重要組成部分。

    DOM2 級:若是說 DOM1 級的目標主要是映射文檔的結構,那麼 DOM2 級的目標就要寬泛多了。DOM2 級在原來 DOM 的基礎上又擴充了(DHTML 一直都支持的)鼠標和用戶界面事件、範圍、遍歷(迭代DOM文檔的方法)等細分模塊,並且經過對象接口增長了對 CSS(Cascading Style Sheets,層疊樣式表)的支持。DOM1 級中的 DOM 核心模塊也通過擴展開始支持 XML 命名空間。

    DOM2 級引入了下列新模塊,也給出了衆多新類型和新接口的定義:

    一、DOM 視圖(DOM Views)——定義了跟蹤不一樣文檔(例如,應用 CSS 以前和以後的文檔)視圖的接口;

    二、DOM 事件(DOM Events)——定義了事件和事件處理的接口;

    三、DOM 樣式(DOM Style)——定義了基於 CSS 爲元素應用樣式的接口;

    四、DOM 遍歷和範圍(DOM Traversal and Range)——定義了遍歷和操做文檔樹的接口。

    DOM3 級:進一步擴展了 DOM,引入了以統一方式加載和保存文檔的方法——在 DOM 加載和保存(DOM Load and Save)模塊中定義;新增了驗證文檔的方法——在 DOM 驗證(DOM Validation)模塊中定義。DOM3 級也對 DOM 核心進行了擴展,開始支持 XML 1.0 規範,涉及 XML Infoset、XPath 和 XML Base。

    在閱讀 DOM 標準的時候,你可能會看到 DOM0 級(DOM Level 0)的字眼。實際上,DOM0 級標準是不存在的;所謂 DOM0 級只是 DOM 歷史座標中的一個參照點而已。具體說來,DOM0 級指的是 IE4 和 Netscape Navigator 4.0 最初支持的 DHTML。


    3.其餘 DOM 標準(選讀)

    除了 DOM 核心和 DOM HTML 接口以外,另外幾種語言還發布了只針對本身的 DOM 標準。下面列出的語言都是基於 XML 的,每種語言的 DOM 標準都添加了與特定語言相關的新方法和新接口:

    (1)SVG(Scalable Vector Graphic,可伸縮矢量圖)1.0;

    (2)MathML(Mathematical Markup Language,數學標記語言)1.0;

    (3)SMIL(Synchronized Multimedia Integration Language,同步多媒體集成語言)。

    還有些語言也開發了本身的 DOM 實現,例如 Mozilla 的 XUL(XML User Interface Language,XML 用戶界面語言)。可是,只有上面列出的幾種語言是 W3C 的推薦標準。

    4.Web 瀏覽器對 DOM 的支持


    1.2.3 瀏覽器對象模型(BOM)

    IE3 和 Netscape Navigator3 有一個共同的特點,那就是支持能夠訪問和操做瀏覽器窗口的瀏覽器對象模型(BOM,Browser Object Model)。開發人員使用 BOM 能夠控制瀏覽器顯示的頁面之外的部分。而 BOM 真正不同凡響的地方(也是常常會致使問題的地方),仍是它做爲 JavaScript 實現的一部分,至今仍沒有相關的標準。

    從根本上講,BOM 只處理瀏覽器窗口和框架;但人們習慣上也把全部針對瀏覽器的 JavaScript 擴展算做 BOM 的一部分。下面就是一些這樣的擴展:

    (1)彈出新瀏覽器窗口的功能;

    (2)移動、縮放和關閉瀏覽器窗口的功能;

    (3)提供瀏覽器詳細信息的 navigator 對象;

    (4)提供瀏覽器所加載頁面的詳細信息的 location 對象;

    (5)提供用戶顯示器分辨率詳細信息的 screen 對象;

    (6)對 cookies 的支持;

    (7)像 XMLHttpRequest 和 IE 的ActiveXObject 這樣的自定義對象。

    因爲沒有 BOM 標準能夠遵循,所以每一個瀏覽器都由本身的實現。雖然也存在一些事實標準,例如要有 window 對象和 navigator 對象等,但每一個瀏覽器都會爲這兩個對象仍至其餘對象定義本身的屬性和方法。

    1.3 JavaScript 版本

    身爲 Netscape 「繼承人」 的 Mozilla 公司,是目前惟一還在沿用最初的 JavaScript 版本編號序列的瀏覽器開發商。在 Netscape 將源代碼提交給開源的 Mozilla 項目的時候,JavaScript 再瀏覽器中的最後一個版本號是 1.3.(如前所述,1.4版本是隻針對服務器的實現。)後來,隨着 Mozilla 基金會繼續開發 JavaScript,添加新的特性、關鍵字和語法,JavaScript 的版本號繼續遞增。下表列出了 Netscape/Mozilla 瀏覽器中 JavaScript 版本號的遞增過程


    實際上,上表中的編號方案源自 Firefox 4 將內置 JavaScript 2.0 這一共識。所以,2.0版本以前每一個遞增的版本號,表示的是相應實現與 JavaScript 2.0 開發目標還有多大的距離。雖然原計劃是這樣,但在 ECMAScript3.1 建議日益受到人民關注的狀況下,Mozilla 是否還會繼續這個編號傳統就不得而知了。


    1.4 小結

    JavaScript 是一種專爲與網頁交互而設計的腳本語言,由下列三個不一樣的部分組成:

    一、ECMAScript,由 ECMA-262 定義,提供核心語言功能;

    二、文檔對象模型(DOM),提供訪問和操做網頁內容的方法和接口;

    三、瀏覽器對象模型(BOM),提供與瀏覽器交互的方法和接口。

    JavaScript 的這三個組成部分,在當前五個主要瀏覽器(IE、Firefox、Chrome、Safari 和 Opera)中都獲得了不一樣程度的支持。其中,全部瀏覽器對 ECMAScript 第 3 版的支持大致上都還不錯,但對 DOM 的支持則彼此相差比較多。對 JavaScript 中惟一尚無標準的 BOM 來講,儘管各瀏覽器都實現了某些衆所周知的共同特性,但其餘特性仍是會因瀏覽器而異。

相關文章
相關標籤/搜索