1.1 JavaScript簡史
??Javascript誕生于1995年晃琳。在Javascript問世之前,必須將表單中的數(shù)據(jù)發(fā)送到服務(wù)器端才能確定用戶是否填寫了某個必填域朗兵,是否輸入了無效的值。Netscape Navigator(上古瀏覽器)希望通過Javascript來解決這個問題。
??1995年姐刁,就職與Netscape公司的Brendan Eich,開始著手為2月份即將發(fā)布的Netscape Navigator2開發(fā)一種名為LiveScript的腳本語言烦味。為了趕在發(fā)布日期之前完成LiveScript的開發(fā)聂使,Netscape與Sun公司建立了一個開發(fā)聯(lián)盟,在Netscape Navigator2正式發(fā)布前夕,Netscape為了搭上媒體熱炒的Java的順分車柏靶,臨時將LiveScript更名為JavaScript弃理。
??由于JavaScript 1.0獲得了巨大的成功,因此Netscape隨即在Netscape Navigator 3中又發(fā)布了JavaScript 1.1宿礁。Web雖然羽翼未豐案铺,但用戶關(guān)注度屢創(chuàng)新高。在這樣的背景下梆靖,在Netscape Navigator 3發(fā)布不久后控汉,微軟隨即在其產(chǎn)品Internet Explorer 3中加入了名為JScript的JavaScript實現(xiàn)。
??微軟推出JScript之后返吻,意味著市場上擁有了3個不同的JavaScript版本:Netscape Navigator中的JavaScript姑子, IE中的JScript和ScriptEase中的CEnvi。與其他編程語言不同测僵,當(dāng)時還沒有標(biāo)準(zhǔn)規(guī)定JavaScript的語法和特性街佑,3個不同版本并存的局面已經(jīng)完全暴露了這個問題。隨著業(yè)界的擔(dān)心日益加劇捍靠,JavaScript的標(biāo)準(zhǔn)化問題被提上了日程沐旨。
??1997年,以JavaScript 1.1為藍(lán)本的建議被提交給了歐洲計算機(jī)制造商協(xié)會(ECMA榨婆,European Computer Manufactures 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)。自此以后香璃,各瀏覽器廠商就將ECMAScript作為各自JavaScript實現(xiàn)的基礎(chǔ)这难,也在不同程度上取得了成功。
1.2 JavaScript實現(xiàn)
??雖然JavaScript 和ECMAScript通常被人們表達(dá)成相同的含義葡秒,但JavaScript的含義卻比ECMA-262中規(guī)定的要多的多姻乓。一個完整的JavaScript實現(xiàn)應(yīng)該包含以下三個部分:
- 核心(ECMAScript實現(xiàn))
- 文檔對象模型(DOM)
-
瀏覽器對象模型(BOM)
image.png
1.2.1 ECMAScript
??由ECMA-262規(guī)定的ECMAScript與web瀏覽器并沒有依賴關(guān)系嵌溢。實際上,這門語言本身并不包含輸入輸出定義蹋岩。ECMA-262定義的只是這門語言的基礎(chǔ)赖草,而在此基礎(chǔ)上可以構(gòu)建更加完善的腳本語言。大致上來說剪个,ECMA-262規(guī)定了以下組成部分:
- 語法
- 類型
- 語句
- 關(guān)鍵字
- 保留字
- 操作符
- 對象
??ECMAScript就是對實現(xiàn)以上標(biāo)準(zhǔn)的語言的描述秧骑。JavaScript實現(xiàn)了ECMAScript,Adobe ActionScript同樣實現(xiàn)了ECMAScript扣囊。ECMAScript最近一版是第5版乎折,發(fā)布于2009年。而ECMAScript的第一版本質(zhì)上與JavaScript 1.1相同侵歇,只不過刪除了所有針對特定瀏覽器的代碼骂澄。ECMA-262給出了ECMAScript兼容的定義。要想成為ECMAScript的實現(xiàn)惕虑,必須做到:
- 支持ECMA-262描述的所有“類型坟冲,值,對象溃蔫,屬性健提,函數(shù)以及程序句法和語義”
- 支持Unicode字符標(biāo)準(zhǔn)
??到2008年,五大主流瀏覽器(IE伟叛,F(xiàn)irefox私痹,Safari,Chrome和Opera)全部做到了與ECMA-262兼容痪伦。
1.2.2 文檔對象模型(DOM)
??文檔對象模型(DOM侄榴,Document Object Model)是針對XML但經(jīng)過擴(kuò)展用于HTML的應(yīng)用程序編程接口(API雹锣,Application Programming Interface)网沾。
??DOM分為三級。DOM1級(DOM Level 1)于1988年3月成為W3C的推薦標(biāo)準(zhǔn)蕊爵。DOM1級由兩個模塊組成:DOM Core和DOM HTML辉哥。其中,DOM Core規(guī)定如何映射基于XML的文檔結(jié)構(gòu)攒射,以便于簡化對于文檔中任意部分的訪問醋旦;DOM HTML則在DOM Core的基礎(chǔ)上加以擴(kuò)展,添加了針對HTML的對象和方法会放。
DOM并不只針對JavaScript饲齐,很多其他語言也實現(xiàn)了DOM。不過咧最,在瀏覽器中捂人,基于ECMAScript實現(xiàn)的DOM確實已經(jīng)成為JavaScript的重要組成部分御雕。
??如果說DOM1級的主要目標(biāo)是映射文檔結(jié)構(gòu),那么DOM2的目標(biāo)就要寬泛的多了滥搭。DOM2級在DOM1的基礎(chǔ)上引入了以下新模塊:
- DOM Views:定義了跟蹤不同視圖文檔的接口(例如應(yīng)用CSS之前和之后的文檔)
- DOM Events:定義了事件和事件處理接口
- DOM Style:定義了基于CSS為元素定義樣式的接口
- DOM Traversal and Range:定義了遍歷和操作文檔樹的接口
DOM2級事件請參考:http://www.reibang.com/p/622d994906f7
??DOM3則進(jìn)一步擴(kuò)展了DOM酸纲,引入了以統(tǒng)一方式加載和保存文檔的方式(定義在DOM Load and Save模塊);新增了文檔驗證的方法(定義在DOM Validation模塊)瑟匆。下面是主流瀏覽器對DOM的支持情況:
1.2.3 瀏覽器對象模型(BOM)
??瀏覽器對象模型(BOM闽坡,Browser Object Model)提供了訪問和操作瀏覽器窗口的接口。BOM經(jīng)常會導(dǎo)致的問題在于它作為JavaScript實現(xiàn)的一部分愁溜,卻沒有相關(guān)標(biāo)準(zhǔn)疾嗅。因此HTML5致力于把很多BOM功能納入正式規(guī)范。
??從根本上來講祝谚,BOM只處理瀏覽器窗口和框架宪迟;但人們習(xí)慣把所有針對瀏覽器的JavaScript擴(kuò)展都算作BOM的一部分。下面就是一些這樣的擴(kuò)展:
- 彈出新瀏覽器窗口
- 移動交惯,縮放和關(guān)閉瀏覽器窗口
- 提供瀏覽器詳細(xì)信息的navigator對象
- 提供瀏覽器所加載頁面詳細(xì)信息的location對象
- 提供用戶顯示器分辨率詳細(xì)信息的screen對象
- 對cookies的支持
??由于BOM沒有標(biāo)準(zhǔn)遵循次泽,因此每個瀏覽器廠商都有自己的實現(xiàn)。雖然也有一些事實標(biāo)準(zhǔn)席爽,例如window對象和navigator對象意荤,但每個瀏覽器廠商都會為這兩個對象乃至其他對象定義自己的屬性和方法。
1.3 JavaScript版本
??作為Netscape繼承人的Mozilla公司只锻,是目前唯一還在沿用最初JavaScript版本號的公司玖像。在Netscape將源代碼提交給Mozilla公司時,JavaScript在瀏覽器中的最后一個版本號是1.3齐饮。后來捐寥,隨著Mozilla基金會繼續(xù)開發(fā)JavaScript,添加新的特性祖驱,關(guān)鍵字和語法握恳,JavaScript的版本號持續(xù)遞增。下表列出了Netscape/Mozilla瀏覽器中JavaScript版本號的遞增過程: