摘要:發(fā)布后不久,微軟就在其中加入了名為的實現(xiàn)命名為是為了避開與有關(guān)的授權(quán)問題。以現(xiàn)在的眼光來看,微軟年月為進入瀏覽器領(lǐng)域而實施的這個重大舉措,是導(dǎo)致日后蒙羞的一個標(biāo)志性時間。微軟推出其實現(xiàn)意味著有了兩個不同的版本中的中的。
JavaScript簡介
前言:最近在細(xì)讀Javascript高級程序設(shè)計,對于我而言,中文版,書中很多地方一筆帶過,所以用自己所理解的,嘗試細(xì)致解讀下。如有紕漏或錯誤,會非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaScript高級程序設(shè)計第三版》。
JavaScript誕生于1995年。當(dāng)時,它的主要目的是處理以前由有服務(wù)器語言(如Perl)負(fù)責(zé)的一些輸入驗證操作。
在JavaScript問世之前,必須把表單數(shù)據(jù)發(fā)送到服務(wù)器端才能確定用戶是否沒有填寫某個必填項,是否輸入了無效的值。
Netscape Navigator希望通過JavaScript來解決這個問題。在人們普遍使用電話撥號上網(wǎng)的年代,能夠在客戶端完成一些基本的驗證任務(wù)絕對是令人興奮的。畢竟,撥號上網(wǎng)的速度之慢,導(dǎo)致了與服務(wù)器的每一次數(shù)據(jù)交換都成了對人們耐心的一次考驗。
自此以后,JavaScript逐漸成為世面上常見瀏覽器必備的一項特色功能。如今,JavaScript的用途早不再局限于簡單的數(shù)據(jù)驗證,而是具備了與瀏覽器窗口及其內(nèi)容等幾乎所有方面交互的能力。
今天的JavaScript已經(jīng)成為了一門功能全面的編程語言,能夠處理復(fù)雜的計算和交互,擁有了閉包、匿名(lambda,拉姆達)函數(shù),設(shè)置元編程等特性。
作為Web的一個重要組成部分,JavaScript的重要性是不言而喻的,就連手機瀏覽器,甚至那些專門為殘障人士設(shè)計的非常規(guī)瀏覽器都支持它。
當(dāng)然,微軟的例子更為典型。雖然有自己的客戶端腳本語言VBScript,但微軟仍然在Internet Explorer的早起版本中加入了自己的JavaScript實現(xiàn)。
JavaScript從一個簡單的輸入驗證器發(fā)展成為一門強大的編程語言,完全出乎人們的意料。
它既是一門非常簡單的語言,又是一門非常復(fù)雜的語言。
說它簡單,是因為學(xué)會使用它只需片刻功夫;而說它復(fù)雜,是因為要真正掌握它需要數(shù)年時間。要想全面理解和掌握J(rèn)avaScript,關(guān)鍵在于弄清楚它的本質(zhì)、歷史和局限性。
JavaScript簡史在Web日益流行的同時,人們對客戶端腳本語言的需求也越來越強烈。那個時候,絕大多數(shù)因特網(wǎng)用戶都使用速度僅為28.8bit/s的“貓”(調(diào)制解調(diào)器)上網(wǎng),但網(wǎng)頁的大小和復(fù)雜性卻不斷增加。
為完成簡單的表單驗證而頻繁地獄服務(wù)器交換數(shù)據(jù)只會加重用戶的負(fù)擔(dān)。想象一下:用戶填寫完一個表單,單擊“提交”按鈕,然后等待30秒鐘,最終服務(wù)器返回消息說有一個必填字段沒有填好.....當(dāng)時走在技術(shù)革新最前沿的Netscape公司,決定著手可開發(fā)一種客戶端語言,用來處理這種簡單的驗證。
當(dāng)時就職于Netscape公司的Brendan Eich,開始著手為計劃于1995年2月發(fā)布的Netscape Navigator 2 開發(fā)一種名為 LiveScript的腳本語言——該語言將同時在瀏覽器和服務(wù)器中使用(它在服務(wù)器上的名字叫LiveWire)。為了趕在發(fā)布日期前完成LiveScript的開發(fā),Netscape與Sun公司建立了一個開發(fā)聯(lián)盟。在Netscape Navigator 2正是發(fā)布前夕,Netscape為了搭上媒體熱炒Java的順風(fēng)車,臨時把LiveScript改名為JavaScript。
由于JavaScript 1.0獲得了巨大成功,NetScape隨即在Netscape Navigator 3中又發(fā)布了JavaScript 1.1。Web雖然羽翼未豐,但用戶關(guān)注度卻屢創(chuàng)新高。在這樣的背景下,Netscape把自己定位為市場領(lǐng)袖型公司。與此同時,微軟決定與Navigator競爭的自家產(chǎn)品Internet Explorer瀏覽器投入更多資源。Navigator 3 發(fā)布后不久,微軟就在其Internet Expolorer 3中加入了名為JScript的JavaScript實現(xiàn)(命名為JScript是為了避開與Netscape有關(guān)的授權(quán)問題)。以現(xiàn)在的眼光來看,微軟1996年8月為進入Web瀏覽器領(lǐng)域而實施的這個重大舉措,是導(dǎo)致Netscape日后蒙羞的一個標(biāo)志性時間。這也標(biāo)志著JavaScript作為一門語言,其開發(fā)向前邁進了一大步。
微軟推出其JavaScript實現(xiàn)意味著有了兩個不同的JavaScript版本:Netscape Navigator中的JavaScript、Internet Explorer中的JScript。
與C及其他編程語言不同,當(dāng)時還沒有標(biāo)準(zhǔn)規(guī)定JavaScript的語法和特性,兩個不同版本并存的局面已經(jīng)完全暴露了這個問題。隨著頁面擔(dān)心的日益加劇,JavaScript的標(biāo)準(zhǔn)化問題被提上了議事日程。
1997年,以JavaScript 1.1 為藍(lán)本的建議被提交給了歐洲計算機制造商協(xié)會(ECMA,European Computer Manufacturers Association)。該協(xié)會指定39號技術(shù)委員會(TC39,Technical Committee #39)負(fù)責(zé)“標(biāo)準(zhǔn)化一種通用、跨平臺、供應(yīng)商中立的腳本語言的語法和語義”。TC39由來自Netscape、Sun、微軟、Borland及其他關(guān)注腳本語言發(fā)展的公司的程序員組成,他們經(jīng)過數(shù)月的努力完成了ECMA-262——定義一種名為ECMAScript的新腳本語言的標(biāo)準(zhǔn)。
第二年,ISO/IEC(International Organization for Standardization and International Electrotechnical Commission,國際標(biāo)準(zhǔn)化組織和國際電工委員會)也采用了ECMAScript作為標(biāo)準(zhǔn)(即ISO/IEC-16262)。自此之后,瀏覽器開發(fā)上就開始致力于將ECMAScript作為各自JavaScript實現(xiàn)的基礎(chǔ),也在不同程度上取得了成功。
JavaScript的實現(xiàn)雖然JavaScript和ECMAScript通常都被人們用來表達相同的含義,但JavaScript的含義卻比ECMA-262規(guī)定的要多得多。
一個完整的JavaScript實現(xiàn)應(yīng)該由下列三個不同的部分組成。
核心(ECMAScript)
文檔對象模型(DOM)
瀏覽器對象模型 (BOM)
ECMAScript由ECMA-262定義的ECMAScript與Web瀏覽器沒有依賴關(guān)系。實際上,這門語言本身并不包含輸入和輸出定義。ECMAScript-262定義的只是這門語言的基礎(chǔ),而在此基礎(chǔ)之上可以構(gòu)建更完善的腳本語言。
我們常見的Web瀏覽器只是ECMAScript實現(xiàn)可能的宿主環(huán)境之一。宿主環(huán)境不僅提供基本的ECMAScript實現(xiàn),同時也會提供該語言的擴展,以便語言與環(huán)境之間對接交互。而這些擴展——如DOM,則利用ECMAScript的核心類型和語法提供更多更具體的功能,以便實現(xiàn)針對環(huán)境的操作。其他宿主環(huán)境包括Node(一種服務(wù)端JavaScript平臺)和Adobe Flash。
既然ECMA-262標(biāo)準(zhǔn)沒有參照Web瀏覽器,那它規(guī)定了些什么內(nèi)容?大致來說,它規(guī)定了這門語言的下列組成部分。
語法
語句
對象
類型
關(guān)鍵字
保留字
操作符
ECMAScript就是對實現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個方面內(nèi)容的語言的描述。
JavaScript實現(xiàn)了ECMAScript,Adobe ActionScript同樣也實現(xiàn)了ECMAScript。
ECMAScript的版本
這里只說下第五版。
ECMAScript 3.1成為 ECMAScript-262第五版,并于2009年12月3日正式發(fā)布。第5版力求澄清第3版中已知的歧義并增添了新的功能。新功能包括原生JSON對象(用于解析和序列化JSON數(shù)據(jù))、繼承的方法和高級屬性定義,另外還包含一種嚴(yán)格模式,對ECMAScript引擎解釋和執(zhí)行代碼進行了補充說明。
什么是ECMAScript兼容
ECMA-262給出了ECMAScript兼容的定義。要想成為ECMAScript的實現(xiàn),則該實現(xiàn)必須做到:
支持ECMA-262描述的所有“類型、值、對象、屬性、函數(shù)以及程序句法和語義。”
支持Unicode字符標(biāo)準(zhǔn)
此外,兼容的實現(xiàn)還可以進行下列擴展。
添加ECMA-262沒有描述的“更多類型、值、屬性和函數(shù)”。ECMA-262所說的這些新增特性,主要是指該標(biāo)準(zhǔn)中沒有規(guī)定的新對象和對象的新屬性。
支持ECMA-262沒有定義的“程序和正則表達式語法”。(也就是說,可以修改和擴展內(nèi)置的正則表達式語法。)
Web瀏覽器對ECMAScript的支持
到了2008年,五大主流Web瀏覽器(IE、Firefox、Safari、Chrome和Opera)全部做到了與ECMAScript-262兼容。IE8是第一個著手實現(xiàn)ECMAScript-262第5版的瀏覽器,并在IE9中提供了完整的支持。Firefox 4也緊隨其后做到兼容。
文檔對象模型(DOM)文檔對象模型(DOM,Document Object Model)是針對XML但經(jīng)過擴展用于HTML的應(yīng)用程序編程接口(API,Application Programming Interface)。DOM把整個頁面映射為一個多層節(jié)點結(jié)構(gòu)。HTML或XML頁面中的每個組成部分都是某種類型的節(jié)點,這些節(jié)點又包含不同類型的數(shù)據(jù)。
Sample Page hello world
通過DOM創(chuàng)建的這個表示文檔的樹形圖,開發(fā)人員獲得了控制頁面內(nèi)容和結(jié)構(gòu)的主動權(quán)。借助DOM提供的API,開發(fā)人員可以輕松自如地刪除、添加、替換或修改任何節(jié)點。
為什么要使用DOM
在IE4和Netscape Navigator4分別支持的不同形式的DHTML(Dynamic HTML)基礎(chǔ)上,開發(fā)人員首次無需重新加載網(wǎng)頁,就可以修改其外觀和內(nèi)容了。然而,DHTML在給Web技術(shù)發(fā)展帶來巨大進步的同時,也帶來了巨大的問題。由于Netscape和微軟在開發(fā)DHTML方面各執(zhí)己見,過去那個只編寫一個HTML頁面就能夠在任何瀏覽器中運行的時代結(jié)束了。
對開發(fā)人員來說,如果想繼續(xù)保持Web跨平臺的天性,就必須額外多做些工作。而人們真正擔(dān)心的是,如果不對Netscape和微軟加以控制,Web開發(fā)領(lǐng)域就會出現(xiàn)技術(shù)上兩強割據(jù),瀏覽器互不兼容的局面。
此時,負(fù)責(zé)制定Web通信標(biāo)準(zhǔn)的W3C(World Wide Web Consortium,萬維網(wǎng)聯(lián)盟)開始著手規(guī)劃DOM。
DOM級別
DOM1級(DOM Level1)于1998年10月成為W3C的推薦標(biāo)準(zhǔn)。DOM1級由兩個模塊組成:DOM核心(DOM Core)和DOM HTML。
其中,DOM核心規(guī)定的是如何映射基于XML的文檔結(jié)構(gòu),以便簡化對文檔中任意部分的訪問和操作。
DOM HTML模塊則在DOM核心的基礎(chǔ)上加以擴展,添加了針對HTML的對象和方法。
DOM并不只是針對JavaScript的,很多別的語言月都實現(xiàn)了DOM。不過,在Web瀏覽器中,基于ECMAScript實現(xiàn)的DOM的確已經(jīng)成為JavaScript這門語言的一個重要組成部分。
如果說DOM1級的目標(biāo)主要是映射文檔的結(jié)構(gòu),那么DOM2級的目標(biāo)就要寬泛多了。DOM2級在原來DOM的基礎(chǔ)上又?jǐn)U展了鼠標(biāo)和用戶界面時間、范圍、遍歷(迭代DOM文檔的方法)等細(xì)分模塊,而且通過對象接口增加了對CSS(Cascading Style Sheets,層疊樣式表)的支持。DOM1級中的DOM核心模塊也經(jīng)過擴展開始支持XML命名空間。
DOM2級引入了下列新模塊,也給出了眾多新類型和新接口的定義。
DOM視圖(DOM Views):定義了跟蹤不同文檔(應(yīng)用CSS之前和之后的文檔)視圖的接口;
DOM事件 (DOM Events):定義了事件和事件處理的接口;
DOM樣式(DOM Style): 定義了基于CSS為元素應(yīng)用樣式的接口;
DOM遍歷和范圍(DOM Tranversal and Range):定義了遍歷和操作文檔數(shù)的接口。
DOM3級則進一步擴展了DOM,引入了以統(tǒng)一方式加載和保存文檔的方法——在DOM加載和保存(DOM Load and Save)模塊中定義;
新增了驗證文檔的方法——在DOM驗證(DOM Validation)模塊中定義。DOM3級也對DOM核心進行了擴展,開始支持XML 1.0規(guī)范,涉及XML Infoset、XPath和XML Base。
在閱讀相關(guān)參考文檔的時候,可能會看到DOM0級(DOM Level 0)的字眼。實際上,DOM0級標(biāo)準(zhǔn)是不存在的;所謂DOM0級只是DOM歷史坐標(biāo)中的一個參照點而已。具體來說,DOM0級指的是IE 4和Natscape Navigator 最初支持的DHTML。
其他DOM標(biāo)準(zhǔn)
除了DOM核心和DOM HTML接口之外,另外幾種語言還發(fā)布了只針對自己的DOM標(biāo)準(zhǔn)。下面列出的語言都是基于XML的,每種語言的DOM標(biāo)準(zhǔn)都添加了與特定語言相關(guān)的新方法和新街口:
SVG(Scalable Vector Graphic,可伸縮矢量圖) 1.0;
MathML(Mathematrical Markup Language,數(shù)學(xué)標(biāo)記語言) 1.0;
SMIL(Synchronized Multimedia Intgration Language,同步多媒體集成語言)。
還有一些語言也開發(fā)了自己的DOM實現(xiàn),例如Mozilla的XUL(XML User Interfacce Language,XML用戶界面語言)。但是,只有上面列出的幾種語言是W3C的推薦標(biāo)準(zhǔn)。
Web瀏覽器對DOM的支持
在DOM標(biāo)準(zhǔn)出現(xiàn)了一段時間后,Web瀏覽器才開始實現(xiàn)它。微軟IE5首次嘗試實現(xiàn)DOM,知道IE5.5才算是真正支持DOM1級。在隨后的IE6和IE7中,微軟都沒有引入新的DOM功能,而到了IE8才對以前DOM實現(xiàn)中的bug進行了修復(fù)。
Netscape直到Netscape6(Mozilla 0.60)才開始支持DOM。在Netscape7之后,Mozilla把開發(fā)中心轉(zhuǎn)向了Firefox瀏覽器。Firefox 3完成支持DOM1級,幾乎完全支持DOM2級,甚至還支持DOM3級的一部分。(Mozilla開發(fā)團隊的目標(biāo)是構(gòu)建與標(biāo)準(zhǔn)100%兼容的瀏覽器,而他們的努力也得到了回報。)
支持DOM已經(jīng)成為瀏覽器開發(fā)商的首要目標(biāo),主流瀏覽器每次發(fā)布新版本都會改進對DOM的支持。
瀏覽器對象模型(BOM)IE3和Netscape Navigator 3有一個共同的特色,那就是支持可以訪問和草祖宗瀏覽器窗口的瀏覽器對象模型(BOM,Broswer Object Model)。開發(fā)人員使用BOM可以可控制瀏覽器顯示的頁面以外的部分。而BOM真正與眾不同的地方(也是經(jīng)常會導(dǎo)致問題的地方),還是它作為JavaScript實現(xiàn)的一部分但卻沒有相關(guān)標(biāo)準(zhǔn)。這個問題在HTML5中得到了解決,HTML5致力于把很多BOM功能寫入正式規(guī)范。
HTML5發(fā)布后,很多關(guān)于BOM的困惑煙消云散。
從根本上講,BOM只處理瀏覽器窗口和框架,但人們習(xí)慣上也把所有針對瀏覽器的JavaScript擴展算作BOM的一部分。
彈出新瀏覽器窗口的功能;
移動、縮放和關(guān)閉瀏覽器窗口的功能;
提供瀏覽器詳細(xì)信息的navigator對象;
提供瀏覽器加載頁面的詳細(xì)信息的location對象;
提供用戶顯示器分辨率詳細(xì)信息的screen對象;
對cookies的支持;
像XMLHttpRequest和IE的ActiveXObject這樣的自定義對象。
由于沒有BOM標(biāo)準(zhǔn)可以遵循,因此每個瀏覽器都有自己的實現(xiàn)。
雖然也存在一些事實標(biāo)準(zhǔn),例如、要有window對象和navigator對象等,但每個瀏覽器都會為這兩個對象乃至其他對象定義自己的屬性和方法。
JavaScript是一種專為與網(wǎng)頁交互而設(shè)計的腳本語言,由下列三個不同的部分組成:
ECMAScript,由ECMA-262定義,提供核心語言功能;
文檔對象模型(DOM),提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口;
瀏覽器對象模型(BOM),提供與瀏覽器交互的方法和接口。
JavaScript的這三個組成部分,在當(dāng)前五個主流瀏覽器(IE,FF,Chrome, Safari和Opera)中都得到了不同程度的支持。
對已經(jīng)正式納入HTML5標(biāo)準(zhǔn)的BOM來說,盡管各瀏覽器都實現(xiàn)了某些眾所周知的共同特性,但其他特性還是因瀏覽器而異。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108635.html
摘要:誕生于年,它的主要目的是處理以前由服務(wù)器端語言負(fù)責(zé)的一些輸入驗證操作。的不同版本又稱為版次,以第版表示。目前最新的是簡稱文檔對象模型文檔對象模型,是針對但經(jīng)過拓展用于的應(yīng)用程序接口,。元素當(dāng)瀏覽器不支持或被禁用時,顯示里面的內(nèi)容。 JavaScript誕生于1995年,它的主要目的是處理以前由服務(wù)器端語言負(fù)責(zé)的一些輸入驗證操作。 完整的JavaScript實現(xiàn)由下列三個不同的部分組成:...
摘要:簡介簡史誕生于年,當(dāng)時主要負(fù)責(zé)表單的輸入驗證。實現(xiàn)一個完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個方面內(nèi)容的語言的描述。把整個頁面映射為一個多層節(jié)點結(jié)構(gòu)。由萬維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當(dāng)時主要負(fù)責(zé)表單的輸入驗證。 如果沒有表單驗證的功能,填入信息之...
閱讀 2014·2021-08-21 14:09
閱讀 481·2019-08-30 15:44
閱讀 2106·2019-08-29 16:32
閱讀 1370·2019-08-29 15:36
閱讀 3433·2019-08-29 12:43
閱讀 2776·2019-08-29 11:14
閱讀 429·2019-08-28 18:26
閱讀 2246·2019-08-26 13:57