Netscape發(fā)明了JavaScript
當(dāng)Netscape Navigator嶄露頭角時(shí)槐脏,Nombas開發(fā)了一個(gè)可以嵌入網(wǎng)頁(yè)中的CEnvi的版本喉童。這些早期的試驗(yàn)被稱為Espresso Page(濃咖啡般的頁(yè)面),它們代表了第一個(gè)在萬(wàn)維網(wǎng)上使用的客戶端語(yǔ)言顿天。而Nombas絲毫沒(méi)有料到它的理念將會(huì)成為萬(wàn)維網(wǎng)的一塊重要基石堂氯。
當(dāng)網(wǎng)上沖浪越來(lái)越流行時(shí),對(duì)于開發(fā)客戶端腳本的需求也逐漸增大牌废。此時(shí)咽白,大部分因特網(wǎng)用戶還僅僅通過(guò)28.8 kbit/s的調(diào)制解調(diào)器連接到網(wǎng)絡(luò),即便這時(shí)網(wǎng)頁(yè)已經(jīng)不斷地變得更大和更復(fù)雜鸟缕。而更加加劇用戶痛苦的是晶框,僅僅為了簡(jiǎn)單的表單有效性驗(yàn)證,就要與服務(wù)器進(jìn)行多次地往返交互叁扫。設(shè)想一下三妈,用戶填完一個(gè)表單,點(diǎn)擊提交按鈕莫绣,等待了30秒的處理后畴蒲,看到的卻是一條告訴你忘記填寫一個(gè)必要的字段。
那時(shí)正處于技術(shù)革新最前沿的Netscape对室,開始認(rèn)真考慮開發(fā)一種客戶端腳本語(yǔ)言來(lái)解決簡(jiǎn)單的處理問(wèn)題模燥。
當(dāng)時(shí)工作于Netscape的Brendan Eich咖祭,開始著手為即將在1995年發(fā)行的Netscape Navigator 2.0開發(fā)一個(gè)稱之為L(zhǎng)iveScript的腳本語(yǔ)言,當(dāng)時(shí)的目的是在瀏覽器和服務(wù)器(本來(lái)要叫它LiveWire)端使用它蔫骂。Netscape與Sun及時(shí)完成LiveScript實(shí)現(xiàn)么翰。
就在Netscape Navigator 2.0即將正式發(fā)布前,Netscape將其更名為JavaScript辽旋,目的是為了利用Java這個(gè)因特網(wǎng)時(shí)髦詞匯浩嫌。Netscape的賭注最終得到回報(bào),JavaScript從此變成了因特網(wǎng)的必備組件补胚。
鼎足三分的天下大勢(shì)
因?yàn)镴avaScript 1.0如此成功码耐,Netscape在Netscape Navigator 3.0中發(fā)布了1.1版。恰巧那個(gè)時(shí)候溶其,微軟決定進(jìn)軍瀏覽器骚腥,發(fā)布了IE 3.0并搭載了一個(gè)JavaScript的克隆版,叫做JScript(這樣命名是為了避免與Netscape潛在的許可糾紛)瓶逃。微軟步入Web瀏覽器領(lǐng)域的這重要一步雖然令其聲名狼藉束铭,但也成為JavaScript語(yǔ)言發(fā)展過(guò)程中的重要一步。
在微軟進(jìn)入后厢绝,有3種不同的JavaScript版本同時(shí)存在:Netscape Navigator 3.0中的JavaScript契沫、IE中的JScript以及CEnvi中的ScriptEase。與C和其他編程語(yǔ)言不同的是代芜,JavaScript并沒(méi)有一個(gè)標(biāo)準(zhǔn)來(lái)統(tǒng)一其語(yǔ)法或特性埠褪,而這3中不同的版本恰恰突出了這個(gè)問(wèn)題。隨著業(yè)界擔(dān)心的增加挤庇,這個(gè)語(yǔ)言的標(biāo)準(zhǔn)化顯然已經(jīng)勢(shì)在必行。
標(biāo)準(zhǔn)化的開始
1997年贷掖,JavaScript 1.1作為一個(gè)草案提交給歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA)嫡秕。第39技術(shù)委員會(huì)(TC39)被委派來(lái)“標(biāo)準(zhǔn)化一個(gè)通用、跨平臺(tái)苹威、中立于廠商的腳本語(yǔ)言的語(yǔ)法和語(yǔ)義”(http://www.ecma-international.org/memento/TC39.htm)昆咽。由來(lái)自Netscape、Sun牙甫、微軟掷酗、Borland和其他一些對(duì)腳本編程感興趣的公司的程序員組成的TC39錘煉出了ECMA-261,該標(biāo)準(zhǔn)定義了名為ECMAScript的全新腳本語(yǔ)言。
在接下來(lái)的幾年里,國(guó)際標(biāo)準(zhǔn)化組織及國(guó)際電工委員會(huì)(ISO/IEC)也采納ECMAScript作為標(biāo)準(zhǔn)(ISO/IEC-16262)找蜜。從此规惰,Web瀏覽器就開始努力(雖然有著不同的程度的成功和失敗)將ECMAScript作為JavaScript實(shí)現(xiàn)的基礎(chǔ)怨咪。
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è)問(wèn)題屉符,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ù)特性袋马,JScript1.0遠(yuǎn)遠(yuǎn)沒(méi)有達(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還沒(méi)有最終定稿,所以JScript 3.0也遭受了和JavaScript 1.2同樣的命運(yùn)-它還是沒(méi)能符合最終的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í),本來(lái)計(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ā)布恶迈,以后也沒(méi)有被放入瀏覽器中。
如今芹务,所有主流的Web瀏覽器都遵守ECMA-262第五版蝉绷,同時(shí)ES6\ES7也已經(jīng)被廣泛的使用鸭廷。