出生就遇瀏覽器大戰(zhàn)轰豆,親爹還不愛,命運(yùn)坎坷的JavaScript終于苦盡甘來

提起JavaScript齿诞,很多開發(fā)者應(yīng)該都很熟悉了酸休,因?yàn)檫@門語言在語言排行榜上常年霸榜;不僅如此祷杈,JavaScriptweb開發(fā)中占據(jù)著舉足輕重的地位斑司,開發(fā)者眾多,數(shù)量上已經(jīng)快要超過Java開發(fā)者了,開發(fā)社區(qū)非乘薰危活躍互站,越來越多的優(yōu)秀開發(fā)框架涌現(xiàn),比如Vue僵缺、React胡桃、Angular等,深受企業(yè)和開發(fā)者們的信賴磕潮。

JavaScript

盡管如今的JavaScript發(fā)展如此繁榮翠胰,但曾經(jīng)的它可沒這么順利,命運(yùn)坎坷用來形容一點(diǎn)都不為過自脯。下面就來一起梳理梳理吧之景!如果小伙伴有更詳細(xì)的補(bǔ)充,歡迎在評(píng)論區(qū)留下您的高見膏潮!

Mosaic瀏覽器首發(fā)

1990年底锻狗,歐洲核能研究組織(CERN)科學(xué)家 Tim Berners-Lee,在互聯(lián)網(wǎng)的基礎(chǔ)上發(fā)明了萬維網(wǎng)(World Wide Web焕参,進(jìn)而實(shí)現(xiàn)了在網(wǎng)上瀏覽網(wǎng)頁文件轻纪;因?yàn)樽铋_始時(shí)候,網(wǎng)頁只能在操作系統(tǒng)的終端里瀏覽龟糕,只能使用命令行操作桐磁,網(wǎng)頁也都是字符悔耘,并沒有圖片讲岁,更沒有現(xiàn)在美觀的樣式和動(dòng)畫,不僅操作不方便衬以,更沒有使用體驗(yàn)和美觀可言缓艳;萬維網(wǎng)的出現(xiàn),網(wǎng)頁可以通過互聯(lián)網(wǎng)來訪問看峻,使得這種情況得到大大改善阶淘。

萬維網(wǎng)

1992 年Nombas 公司開發(fā)了一種腳本語言: CmmC-minus-minus互妓,中文翻譯為C減減溪窒,簡(jiǎn)稱 Cmm),盡管Cmm在命名上和C++有些類似冯勉,但和C++卻是完全不同的語言澈蚌,Cmm 是一門可以替代宏操作的腳本語言,在語法上與 CC ++ 很高的相似度灼狰。

Nombas 公司為Cmm腳本語言開發(fā)了運(yùn)行環(huán)境: CEnvi 宛瞄,通過下載CEnvi ,便能在網(wǎng)頁中嵌入Cmm腳本語言交胚,Cmm的出現(xiàn)使得客戶端腳本語言有了雛形份汗。盡管后來NombasCmm 的名字改成了 ScriptEase盈电,也僅僅是改了名字,雖然名字叫ScriptEase杯活,但他和JavaScript卻沒有任何關(guān)系匆帚,更不是JavaScript語言的源頭。

1992年底旁钧,美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心(NCSA)開發(fā)了史上第一個(gè)瀏覽器卷扮,叫做 MosaicMosaic瀏覽器不僅可以通過互聯(lián)網(wǎng)訪問網(wǎng)頁均践,同時(shí)也可以顯示圖片晤锹,從此網(wǎng)頁可以在圖形界面的窗口瀏覽,瀏覽器時(shí)代正式開啟彤委。

Mosaic瀏覽器

Netscape Navigator 時(shí)代

1994年10月鞭铆,Mosaic瀏覽器的核心開發(fā)成員馬克·安德森(Marc Andreessen吉姆·克拉克(Jim.H.Clark共同創(chuàng)立了Mosaic 公司,目的就是基于 Mosaic 繼續(xù)開發(fā)瀏覽器焦影。

馬克·安德森
吉姆·克拉克

但由于Mosaic 的商標(biāo)被伊利諾伊大學(xué)擁有车遂,并且Mosaic 瀏覽器的技術(shù)已經(jīng)被轉(zhuǎn)讓給了Spyglass公司,所以新成立的Mosaic 公司不久后改名為 Netscape(中文譯為網(wǎng)景)斯辰,并重新編寫代碼實(shí)現(xiàn)了一個(gè)新的瀏覽器舶担,這個(gè)新瀏覽器被取名為 Netscape Navigator,即“導(dǎo)航者”彬呻。而它的對(duì)內(nèi)稱呼為Mozilla衣陶,意為Mosaic殺手。

網(wǎng)景公司

1994年12月闸氮,Navigator 發(fā)布了1.0版剪况,一經(jīng)發(fā)布就取得了巨大成功,在短短的4個(gè)月里就占據(jù)了 90% 的瀏覽器市場(chǎng)蒲跨,短期甚至內(nèi)成為了默認(rèn)瀏覽器译断;同時(shí),Nombas 也發(fā)布了CEnvi 的首個(gè)可用版本或悲。

Netscape Navigator

上網(wǎng)慢且貴

由于 Netscape Navigator 的成功孙咪,更多的應(yīng)用開始出現(xiàn)在互聯(lián)網(wǎng)上,讓網(wǎng)上沖浪越來越流行巡语;但此時(shí)翎蹈,大部分因特網(wǎng)用戶還僅僅通過 28.8 kbit/s 的調(diào)制解調(diào)器連接到網(wǎng)絡(luò),網(wǎng)速很慢而且上網(wǎng)費(fèi)很貴捌臊,所以當(dāng)時(shí)用戶的上網(wǎng)體驗(yàn)不僅不好杨蛋,而且還很昂貴;

使用體驗(yàn)差

有時(shí)候僅僅是簡(jiǎn)單的表單數(shù)據(jù)驗(yàn)證,就要與服務(wù)器進(jìn)行多次的往返交互逞力。設(shè)想一下曙寡,用戶填完一個(gè)表單,點(diǎn)擊提交按鈕寇荧,等待了 30 秒的處理后举庶,看到的卻是一條您的用戶名忘記填寫的提示,如果表單更大揩抡、更復(fù)雜户侥,交互過程將會(huì)更加漫長(zhǎng),對(duì)于用戶來說峦嗤,這個(gè)過程太痛苦了蕊唐。

客戶端語言提上日程

網(wǎng)景公司很快也發(fā)現(xiàn)了,如果用戶忘記填寫“用戶名”烁设,就點(diǎn)了“發(fā)送”按鈕替梨,到服務(wù)器再發(fā)現(xiàn)這一點(diǎn)就太晚了,最好能在表單數(shù)據(jù)與服務(wù)端交互前装黑,就能檢測(cè)出“用戶名”未填寫副瀑,進(jìn)而提示用戶“請(qǐng)?zhí)顚懹脩裘保桓敲舾械囊庾R(shí)到了恋谭,此時(shí)的Navigator 瀏覽器需要一種可以嵌入網(wǎng)頁的腳本語言糠睡,這種語言運(yùn)行在瀏覽器端,可以控制瀏覽器行為疚颊,并且能和服務(wù)端交互狈孔。

于是網(wǎng)景公司便決定開發(fā)一門可以Navigator 瀏覽器中運(yùn)行的、輕量級(jí)的客戶端腳本語言串稀,如果此舉成功除抛,那么一些普通的用戶操作便能放在客戶端來執(zhí)行,進(jìn)而能大大改善用戶操作體驗(yàn)母截,提高網(wǎng)絡(luò)應(yīng)用的運(yùn)行效率。

互聯(lián)網(wǎng)刮起了Java 東風(fēng)

但是又一個(gè)問題擺在了網(wǎng)景公司面前橄教,這是一個(gè)選擇題清寇,有兩個(gè)可選項(xiàng):

  • 到底是使用現(xiàn)有的語言來實(shí)現(xiàn),比如:Perl护蝶、Python华烟、Tcl、Scheme等持灰;
  • 還是重新開發(fā)一門新語言來適應(yīng)當(dāng)前的需求盔夜;

兩個(gè)選擇各有利弊

第一個(gè)選擇,使用現(xiàn)有的編程語言:

  • 可以充分利用現(xiàn)有代碼庫(kù)和程序員資源喂链,入門門檻較低返十;
  • 借助現(xiàn)有語言的市場(chǎng),可以更容易推廣開來椭微;
  • 可能不能完美的實(shí)現(xiàn)當(dāng)下的需求洞坑;

第二個(gè)選擇,重新開發(fā)新語言:

  • 能夠完美實(shí)現(xiàn)當(dāng)前的使用需求蝇率,
  • 需要重新設(shè)計(jì)語言規(guī)范迟杂,吸引開發(fā)者使用,這需要時(shí)間和成本本慕;

到底采用哪一個(gè)選擇排拷,網(wǎng)景公司內(nèi)部爭(zhēng)執(zhí)不下,管理層一時(shí)也難以下定決心锅尘。就在這時(shí)攻泼,Java 異軍突起,這種可以 "一次編寫鉴象,到處運(yùn)行" (Write Once, Run Anywhere) 的語言一經(jīng)發(fā)布就大火忙菠,廣受開發(fā)者和企業(yè)的青睞。

Java 語言

網(wǎng)景公司管理層也動(dòng)了心纺弊,決定與Sun公司合作牛欢,不僅允許Java程序以applet(小程序)的形式,直接在瀏覽器中運(yùn)行淆游;甚至還考慮直接將Java作為腳本語言嵌入網(wǎng)頁傍睹,但由于Java語言過于龐大,并不適合嵌入瀏覽器中犹菱,才不得不放棄拾稳。

Java Applet

1995年5月,網(wǎng)景公司做出決策腊脱,未來的網(wǎng)頁客戶端腳本語言必須"看上去與Java足夠相似"访得,使得Java程序員能夠快速上手,功能不需要太強(qiáng)陕凹,語法簡(jiǎn)單悍抑,容易學(xué)習(xí),即使是非專業(yè)的網(wǎng)頁作者也能快速學(xué)會(huì)杜耙;這個(gè)決策一出搜骡,其實(shí)就已經(jīng)將第一個(gè)選擇排除了,選擇了開發(fā)一門新語言佑女。

Brendan Eich 出場(chǎng)

1995年记靡,網(wǎng)景公司找到了公司程序員 Brendan Eich 谈竿,任命其為這門新的客戶端腳本語言的設(shè)計(jì)者;但Brendan Eich 的研究方向是函數(shù)式編程摸吠,他自身也有很強(qiáng)的函數(shù)式編程背景空凸,所以對(duì)JavaOOP并不感冒;

Brendan Eich - JavaScript 之父

當(dāng)初網(wǎng)景公司招聘他的目的也是研究Scheme語言作為網(wǎng)頁客戶端腳本語言的可能性蜕便。Brendan Eich本人原本以為進(jìn)入新公司后劫恒,將會(huì)是研究Scheme語言,可卻現(xiàn)在接到這樣的任務(wù)轿腺,自然是不情愿的两嘴。

Scheme語言是函數(shù)式語言鼻祖 Lisp語言的一種方言,另外一種比較流行的Lisp方言是Common Lisp族壳。

1995年5月憔辫,Brendan Eich 只用了10天,就設(shè)計(jì)完成了這種語言的第一版仿荆;它是一個(gè)大雜燴贰您,語法有多個(gè)來源,當(dāng)時(shí)的設(shè)計(jì)思路是:

  • 基本語法:借鑒 C 語言和 Java 語言拢操;
  • 數(shù)據(jù)結(jié)構(gòu):借鑒 Java 語言锦亦,包括將值分成原始值和對(duì)象兩大類;
  • 函數(shù)的用法:借鑒 Scheme 語言和 Awk 語言令境,引入閉包杠园,把函數(shù)作為語言的核心;
  • 原型繼承模型:借鑒 Self 語言(Smalltalk 的一種變種)舔庶;
  • 正則表達(dá)式:借鑒 Perl 語言抛蚁;
  • 字符串和數(shù)組處理:借鑒 Python 語言;

網(wǎng)景公司的這種瀏覽器腳本語言惕橙,最初名字叫做 Mocha瞧甩,1995年9月改為 LiveScript;

但由于網(wǎng)景公司的整個(gè)管理層弥鹦,都是認(rèn)準(zhǔn)了Java語言的肚逸,更想借一下Java的東風(fēng),所以同年12月惶凝,網(wǎng)景公司與 Sun 公司達(dá)成協(xié)議吼虎,Sun 公司授權(quán)網(wǎng)景公司將這門新的語言命名為 JavaScript,改名后的JavaScript更是被網(wǎng)景公司和Sun兩家公司聯(lián)手推出苍鲜,官方的宣傳 :JavaScript 是 Java 的補(bǔ)充,屬于輕量級(jí)的 Java玷犹;所以JavaScript = Java + Script這樣的宣傳更不是空穴來風(fēng)混滔。

借此機(jī)會(huì)洒疚,網(wǎng)景公司便將JavaScript申請(qǐng)成為了商標(biāo)。 這樣一來坯屿,網(wǎng)景公司可以借助 Java 語言的聲勢(shì)推廣JavaScript油湖,而 Sun 公司則將自己的影響力擴(kuò)展到了瀏覽器。

僅用10天就設(shè)計(jì)出的語言领跛,其表現(xiàn)可想而知乏德。在其推出后的很長(zhǎng)一段時(shí)間內(nèi),程序運(yùn)行都有著各式各樣的問題吠昭。就連JavaScript的設(shè)計(jì)者本人Brendan Eich都不喜歡他自己設(shè)計(jì)的這門語言:

"與其說我愛Javascript喊括,不如說我恨它。它是C語言和Self語言yiyeqing的產(chǎn)物矢棚。十八世紀(jì)英國(guó)文學(xué)家約翰遜博士說得好:'它的優(yōu)秀之 處并非原創(chuàng)郑什,它的原創(chuàng)之處并不優(yōu)秀。' (the part that is good is not original, and the part that is original is not good.)"

—— Brendan Eich對(duì)JavaScript的評(píng)價(jià)

JavaScript 正式誕生

1995年12月4日蒲肋,網(wǎng)景公司與 Sun 公司聯(lián)合發(fā)布了 JavaScript 語言蘑拯,對(duì)外宣傳 JavaScriptJava 的補(bǔ)充,屬于輕量級(jí)的 Java兜粘,專門用來操作網(wǎng)頁申窘,實(shí)現(xiàn)動(dòng)態(tài)效果。

JavaScript 正式誕生

JavaScript 和 Java

盡管名字里都有Java孔轴,但JavaJavaScript是兩種不同的語言剃法,這兩種語言有一定的相似性,因?yàn)?code>JavaScript的基本語法在設(shè)計(jì)過程中是借鑒了Java的距糖。

  • Java 是強(qiáng)類型的靜態(tài)語言玄窝,是一門純面向?qū)ο蟮恼Z言,以類和對(duì)象為核心悍引,在Java中沒有函數(shù)一說恩脂,有的只是方法。
  • JavaScript是弱類型的動(dòng)態(tài)語言趣斤,在JavaScript 中俩块,語言的函數(shù)是一種獨(dú)立的數(shù)據(jù)類型,且JavaScript是以函數(shù)為核心的浓领,采用基于原型對(duì)象(prototype)的繼承鏈玉凯。
JavaScript 和 Java

另外,Java 程序要經(jīng)過編譯才能運(yùn)行联贩,而 JavaScript 語言的運(yùn)行時(shí)解釋器已經(jīng)集成到瀏覽器中漫仆,所以JavaScript 可在瀏覽器直接運(yùn)行。

1996年3月泪幌,Navigator 2.0 瀏覽器正式內(nèi)置了 JavaScript 腳本語言盲厌。

同年署照,Netscape Navigator 3.0發(fā)布,此版本有分為“Standard Edition”和“Gold Edition”兩個(gè)版本,兩個(gè)版本區(qū)別在于,后者具備郵件軟件和所見即所得的網(wǎng)頁編輯程式系冗。

瀏覽器大戰(zhàn)

Netscape 春風(fēng)得意

1995年開始牙言,萬維網(wǎng)慢慢開始被大眾認(rèn)知,受到越來越多的關(guān)注。 能夠顯示圖形的Mosaic 瀏覽器俘獲了不少用戶的芳心;Netscape Navigator 更是一經(jīng)發(fā)布就占據(jù)了超過90%的瀏覽器市場(chǎng),一度變成最受歡迎的網(wǎng)絡(luò)瀏覽器赶熟。這時(shí)的Netscape 可謂是春風(fēng)得意,但是好景不長(zhǎng)炕倘。

IE 瀏覽器加入

由于微軟對(duì)互聯(lián)網(wǎng)發(fā)展的誤判钧大,輕視了瀏覽器的發(fā)展,使得Netscape Navigator 有機(jī)會(huì)發(fā)展壯大罩旋,但后知后覺的微軟也看到了瀏覽器市場(chǎng)發(fā)展的前景啊央,開始重視起來,并從Spyglass公司處獲得了Mosaic的授權(quán)涨醋,開發(fā)出了自家的瀏覽器:IE 瀏覽器1.0瓜饥,幾個(gè)月后,IE 瀏覽器2.0發(fā)布浴骂,并免費(fèi)向用戶提供乓土;而此時(shí)的Netscape Navigator 是收費(fèi)的。

IE 瀏覽器

大戰(zhàn)一觸即發(fā)

1995年溯警,Netscape Navigator 2.0 發(fā)布后趣苏,瀏覽器市場(chǎng)都以網(wǎng)景的JavaScript為標(biāo)準(zhǔn);微軟公司雖然有IE 瀏覽器梯轻,但卻沒有JavaScript食磕,所以IE瀏覽器Netscape Navigator 2.0面前不堪一擊。

于是喳挑,微軟便找上了網(wǎng)景彬伦,想要收購(gòu)網(wǎng)景,但春風(fēng)得意的網(wǎng)景公司自然是不會(huì)同意的伊诵;微軟自然也不會(huì)放棄单绑,更不會(huì)放任網(wǎng)景做大,緊接著便是全力投入到了IE瀏覽器新版本的開發(fā)中曹宴。

1996年8月搂橙,微軟的IE 3.0發(fā)布,同時(shí)笛坦,微軟也開發(fā)出了自己的客戶端腳本語言:JScript(這個(gè)名字怎么看怎么像JavaScript的縮寫)份氧,在對(duì)自家的IE瀏覽器的宣傳上唯袄,微軟也更是不遺余力弯屈;

1997年 IE4.0發(fā)布蜗帜,IE4.0有著更好的W3C標(biāo)準(zhǔn)的實(shí)現(xiàn),更是被捆綁在了Windows中资厉,隨Windows系統(tǒng)一同發(fā)布厅缺;正是這一舉措,IE瀏覽器的市場(chǎng)份額開始暴增宴偿;

到了1999年湘捎,微軟的IE瀏覽器已經(jīng)占據(jù)了絕大部分瀏覽器市場(chǎng),而此時(shí)網(wǎng)景公司已被美國(guó)在線收購(gòu)窄刘,留下Netscape Navigator在茍延殘喘窥妇。

至此,第一次瀏覽器大戰(zhàn)以IE大獲全勝而告終娩践。

火狐瀏覽器涅槃重生

1998年活翩,網(wǎng)景深知瀏覽器大戰(zhàn)中的Netscape Navigator敗局已定,面對(duì)著無法挽回的市場(chǎng)份額翻伺,網(wǎng)景公司做了一個(gè)重大決定: Netscape Navigator 5.0開源材泄;

同年,網(wǎng)景公司成立非營(yíng)利性組織: Mozilla 基金會(huì)吨岭,主要負(fù)責(zé)Netscape Navigator的開源和維護(hù)拉宗;Mozilla 基金會(huì)獨(dú)立于網(wǎng)景公司運(yùn)行,所以就算后來網(wǎng)景公司雖被美國(guó)在線收購(gòu)辣辫,Mozilla 基金會(huì)卻能一直獨(dú)立運(yùn)作至今旦事。

Mozilla 基金會(huì)的手中,Netscape Navigator開放了源代碼急灭,分兩個(gè)分支:

  • 一個(gè)是Netscape Navigator姐浮,相繼推出了Netscape Navigator6、7化戳、8单料;
  • 另一個(gè)便是Firefox,一直維護(hù)至今点楼;

無論是開源后的Netscape Navigator扫尖,還是Firefox,都是基于Gecko渲染引擎來構(gòu)建的掠廓。關(guān)于這段故事换怖,還有一部紀(jì)錄片,叫《奔騰的代碼》蟀瞧,主要講述的就是Netscape Navigator的開源和Firefox(火狐瀏覽器)的誕生的故事沉颂,想要詳細(xì)了解的同好可以去搜來看看条摸。

開源后的Firefox(火狐瀏覽器)重新開發(fā)了渲染引擎Gecko并且積極擁抱JavaScript標(biāo)準(zhǔn)铸屉,無論是在性能钉蒲,還是用戶體驗(yàn)上,都有了極大的提升彻坛;不僅是在Windows系統(tǒng)顷啼,在Linux系統(tǒng)、Mac系統(tǒng)昌屉,也都有著不俗的表現(xiàn)钙蒙,甚至在Linux系統(tǒng)中,比Chrome瀏覽器的表現(xiàn)都要好间驮。

優(yōu)異的性能躬厌,再加上在Mozilla 基金會(huì)的良好運(yùn)作下,火狐瀏覽器逐漸了獲得用戶認(rèn)可竞帽,原本被IE 瀏覽器占據(jù)的市場(chǎng)逐漸被火狐瀏覽器奪回扛施。

火狐瀏覽器

反觀IE瀏覽器,并沒有積極適配EcmaScript抢呆,始終沉浸在自己的世界中煮嫌,玩著只有自己的游戲,跟標(biāo)準(zhǔn)越走越遠(yuǎn)抱虐,漸漸被用戶拋棄昌阿,原本的用戶市場(chǎng)也被逐漸被涅槃后的火狐瀏覽器所取代。

縱觀瀏覽器發(fā)展歷史恳邀,不得不說懦冰,歷史總是驚人的相似。

WebKit

得益于 KDEKHTMLKJS谣沸,蘋果公司也開發(fā)了自家的JavaScript 引擎:Webkit渲染引擎刷钢,蘋果公司不僅將Webkit渲染引擎開源免費(fèi) ,而且還基于Webkit渲染引擎開發(fā)了 Safari 瀏覽器乳附。

Safari 瀏覽器

V8

谷歌于2008年12月發(fā)布了 Chrome 瀏覽器内地, 與Safari 瀏覽器使用相同的 WebKit 渲染引擎和一個(gè)名為 V8 引擎。V8使用C++開發(fā)赋除,相比其它的JavaScript引擎轉(zhuǎn)換成字節(jié)碼或解釋執(zhí)行阱缓,V8引擎會(huì)將JavaScript程序其編譯成原生機(jī)器碼,所以JavaScript程序在V8引擎下的運(yùn)行速度足以媲美二進(jìn)制程序举农。

Chrome 瀏覽器

不久之后荆针,谷歌便以 Chromium項(xiàng)目開放了Chrome瀏覽器的源碼;新功能會(huì)率先在Chromium上實(shí)現(xiàn),穩(wěn)定后才會(huì)應(yīng)用在Chrome上航背。

JavaScript 標(biāo)準(zhǔn)化

三個(gè)巨頭三足鼎立

在微軟進(jìn)入瀏覽器市場(chǎng)喉悴,發(fā)布了JScript之后,有 3 種不同的 JavaScript 實(shí)現(xiàn)同時(shí)存在玖媚,分別是:

  1. Netscape Navigator 3中的 JavaScript箕肃;
  2. IE 中的 JScript
  3. CEnvi 中的 ScriptEase最盅;

三個(gè)巨頭三足鼎立突雪,形成了三分天下之勢(shì),網(wǎng)景公司也面臨喪失瀏覽器腳本語言的主導(dǎo)權(quán)的局面涡贱;而由此導(dǎo)致的版本不兼容問題日益加劇,當(dāng)時(shí)的一個(gè)網(wǎng)頁程序往往要對(duì)三個(gè)平臺(tái)提供不同的實(shí)現(xiàn)惹想,開發(fā)和維護(hù)的成本都越來越高问词;

ECMA出手拯救JavaScript

1996年11月,網(wǎng)景公司面對(duì)著逐漸被微軟蠶食的瀏覽器市場(chǎng)嘀粱,于是決定將 JavaScript 提交給國(guó)際標(biāo)準(zhǔn)化組織 ECMA(European Computer Manufacturers Association)激挪,希望 JavaScript 能夠成為國(guó)際標(biāo)準(zhǔn),以此抵抗微軟锋叨。

ECMA接受了這個(gè)請(qǐng)求垄分,并決定由39號(hào)技術(shù)委員會(huì)Technical Committee 39)負(fù)責(zé)制定和審核這個(gè)標(biāo)準(zhǔn),委員會(huì)成員由業(yè)內(nèi)各大公司派出的工程師組成娃磺,該委員會(huì)定期開會(huì)薄湿,所有的郵件討論和會(huì)議記錄,都是公開的偷卧。

1997年7月豺瘤,ECMA 組織發(fā)布262號(hào)標(biāo)準(zhǔn)文件(即:ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言JavaScript的標(biāo)準(zhǔn)听诸,并該語言標(biāo)準(zhǔn)取名為 ECMAScript坐求。

之所以不叫 JavaScript,一方面是由于商標(biāo)的關(guān)系晌梨,因?yàn)?code>Java 是 Sun公司的商標(biāo)桥嗤,根據(jù)一份授權(quán)協(xié)議,只有 網(wǎng)景公司可以合法地使用 JavaScript 這個(gè)名字仔蝌,且 JavaScript 已經(jīng)被 網(wǎng)景公司注冊(cè)為商標(biāo)泛领;另一方面是ECMA也想體現(xiàn)ECMAScript并不同于曾經(jīng)的JavaScriptECMA組織也不同于網(wǎng)景掌逛,這樣就有利于保證這門語言的開放性和中立性师逸。

完整的JavaScript實(shí)現(xiàn)

至此,完整的JavaScript實(shí)現(xiàn)包含三個(gè)部分:ECMAScript,文檔對(duì)象模型(DOM)篓像,瀏覽器對(duì)象模型(BOM)动知。 符合ECMA-262 3rd Edition標(biāo)準(zhǔn)的實(shí)現(xiàn)有:

  • Microsoft公司的JScript
  • Mozilla的JavaScript-C员辩,后改名為SpiderMonkey盒粮;
  • Mozilla的Rhino
  • Digital Mars公司的DMDScript奠滑;
  • Google公司的V8丹皱;
  • WebKit

需要注意的是宋税,ECMAScript 只用來標(biāo)準(zhǔn)化 JavaScript 語言的基本語法摊崭,與部署環(huán)境相關(guān)的標(biāo)準(zhǔn)都由其他標(biāo)準(zhǔn)規(guī)定,比如 DOM 的標(biāo)準(zhǔn)就是由 W3C組織制定的杰赛。

ECMA-262 標(biāo)準(zhǔn)后來也獲得國(guó)際標(biāo)準(zhǔn)化組織 ISO的批準(zhǔn)呢簸,并以標(biāo)準(zhǔn)號(hào) ISO-16262命名。

ECMAScript 步入正軌

1997年7月乏屯,ECMAScript 1.0發(fā)布根时,這個(gè)版本做了些小改動(dòng):支持Unicode標(biāo)準(zhǔn),對(duì)象與平臺(tái)無關(guān)等辰晕,其他的特性與網(wǎng)景發(fā)布的JavaScript1.1并無二致蛤迎;

1998年6月ECMAScript 2.0發(fā)布含友,這個(gè)版本主要做的是細(xì)節(jié)優(yōu)化替裆,沒有新功能發(fā)布;

1999年12月唱较,ECMAScript 3.0版發(fā)布扎唾,這個(gè)版本對(duì)JavaScript標(biāo)準(zhǔn)做了大量的修改。修復(fù)了包括字符串處理南缓、錯(cuò)誤定義和數(shù)值輸出等一系列問題胸遇。新增了對(duì)正則表達(dá)式、新控制語句汉形、try-catch異常處理的支持纸镊。此時(shí)的ECMAScript才能算是一門真正的編程語言。

2007年10月概疆,ECMAScript 4.0版草案發(fā)布逗威,草案的標(biāo)準(zhǔn)跟第3版比起來,幾乎是定義了一門新語言岔冀;因?yàn)椴莅覆粌H包含了強(qiáng)類型變量凯旭、新的數(shù)據(jù)結(jié)構(gòu)和繼承,還添加了JSON對(duì)象、繼承的方法和高級(jí)屬性定義罐呼,以及嚴(yán)格模式鞠柄。由于改動(dòng)過大,所以4.0草案發(fā)布后嫉柴,遭到了Yahoo厌杜、Microsoft、Google等公司的反對(duì)计螺。

2008年7月夯尽,由于各方爭(zhēng)執(zhí)不下,ECMAScript 4.0 的開發(fā)被終止登馒,ECMAScript 4.0中改動(dòng)較少的一部分被拿出來匙握,作為 ECMAScript 3.1開發(fā),項(xiàng)目代號(hào)為Harmony谊娇,而其他的改動(dòng)較大的功能將會(huì)逐步推出肺孤,會(huì)后不久,ECMAScript 3.1 改名為 ECMAScript 5济欢;

2009年12月ECMAScript 5.0版 正式發(fā)布小渊;Harmony 項(xiàng)目則一分為二法褥,一些可行性較高的功能優(yōu)先開發(fā),后來成了 ECMAScript 6酬屉;而另一些不太成熟的設(shè)想半等,則會(huì)考慮放在ECMAScript 7中;

2011年6月呐萨,ECMAScript 5.1版發(fā)布杀饵,并且成為 ISO 國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011);

2012年底谬擦,所有的主流瀏覽器全面支持 ECMAScript 5.1切距;

2015年6月ECMAScript 6 正式發(fā)布惨远,并且更名為“ECMAScript 2015”谜悟。同時(shí), TC39 委員會(huì)也計(jì)劃以后每年發(fā)布一個(gè) ECMAScript 的版本北秽;2016年發(fā)布的版本葡幸,稱為“ECMAScript 2016”,2017年發(fā)布“ECMAScript 2017”贺氓,以后的版本以此類推蔚叨。

AJAX

Ajax這個(gè)詞首先出現(xiàn)在《Ajax: A New Approach to Web Applications》一文中,該文的作者是Jesse James Garrett,在該文中蔑水,將Ajax定義為了:Asynchronous JavaScrpt + XML的組合邢锯,代表并不是單一的技術(shù),而是多種技術(shù)的組合肤粱。

Ajax應(yīng)用和普通應(yīng)用的對(duì)比

該文的迅速流傳使得Ajax被更多開發(fā)者認(rèn)知弹囚、認(rèn)可,并在1998年得到了廣泛應(yīng)用领曼。Ajax允許客戶端腳本發(fā)送HTTP請(qǐng)求動(dòng)態(tài)加載局部的網(wǎng)頁內(nèi)容鸥鹉,實(shí)現(xiàn)網(wǎng)頁的異步加載,也就意味著不必因?yàn)榫植烤W(wǎng)頁內(nèi)容的修改而加載整個(gè)網(wǎng)頁庶骄,從而能夠帶來更加友好的網(wǎng)頁體驗(yàn)毁渗。

Ajax的第一個(gè)組件由Outlook Web Access小組寫成,被用于微軟Exchange Server单刁,因此Outlook Web Access成了第一個(gè)應(yīng)用了Ajax技術(shù)的商業(yè)應(yīng)用程序灸异。

Ajax

2005年Google在它的很多應(yīng)用中都使用了Ajax羔飞,如Google討論組肺樟、Google地圖、Google搜索建議逻淌、Gmail等么伯。

自此以后,Ajax迅速竄紅卡儒,進(jìn)而引發(fā)了一場(chǎng)互聯(lián)網(wǎng)革命田柔,使得基于Ajax的綜合框架和JS庫(kù)的急劇增加,越來越多的優(yōu)秀框架出現(xiàn)骨望,不僅Web應(yīng)用的構(gòu)建變得更加容易硬爆,也改進(jìn)了 JavaScript 編程實(shí)踐,對(duì)JavaScript的發(fā)展推進(jìn)做出了巨大的貢獻(xiàn)擎鸠。

JQuery

jQuery是一個(gè)快速缀磕、簡(jiǎn)潔的JavaScript框架,于2006年8月發(fā)布第一個(gè)穩(wěn)定版本糠亩,是繼Prototype之后又一個(gè)優(yōu)秀的JavaScript代碼庫(kù)虐骑。它封裝JavaScript常用的功能代碼,并提供了一種更加簡(jiǎn)便的操作模式赎线,使得HTML文檔操作廷没、事件處理、動(dòng)畫設(shè)計(jì)和Ajax交互變得更加容易垂寥。

JQuery

此外颠黎,jQuery具有高效靈活的CSS選擇器另锋,并且可對(duì)CSS選擇器進(jìn)行擴(kuò)展;擁有便捷的插件擴(kuò)展機(jī)制和豐富的插件狭归。jQuery兼容各種主流瀏覽器夭坪,如IE 6.0+、FF 1.5+过椎、Safari 2.0+室梅、Opera 9.0+等。

Node.js

就在Chromium 發(fā)布半年后疚宇,Ryan Dahl創(chuàng)建了一個(gè)基于 Chrome V8 引擎的 JavaScript 開發(fā)平臺(tái):Node.js亡鼠, Node .js提供了一個(gè)可以JavaScript運(yùn)行在服務(wù)端的運(yùn)行環(huán)境,使得JavaScript程序可以運(yùn)行在服務(wù)端敷待;可以說间涵,Node.js的出現(xiàn)讓 JavaScript 提升了一個(gè)層次,讓前端程序員不再局限于客戶端開發(fā)榜揖,也讓全棧開發(fā)成為了可能勾哩。

Node.js

Node.js發(fā)布的還有包管理工具:npm,通過npm可以:

  • 允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用举哟;
  • 允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用思劳;
  • 允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用;

三大框架

由于Node.js的成功妨猩,在npm管理工具的帶動(dòng)下敢艰,一大批優(yōu)秀的JavaScript開發(fā)框架開始涌現(xiàn),其中有代表性的便是Vue.js册赛、Angular.js、React.js震嫉,這些框架語法簡(jiǎn)單森瘪、性能優(yōu)越、文檔豐富票堵,使用這些框架能夠快速搭建前端應(yīng)用扼睬,而且,由于活躍的開發(fā)社區(qū)悴势,這些框架都有著豐富的系統(tǒng)組件窗宇,能夠完成一切的業(yè)務(wù)需求。

三大框架

Vue.js是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架特纤,自底向上增量開發(fā)的設(shè)計(jì)军俊,專注于視圖層,非常容易學(xué)習(xí)捧存,也非常容易與其它庫(kù)或已有項(xiàng)目整合粪躬,作者是尤雨溪担败;作者和框架無論在國(guó)內(nèi)、國(guó)外都有著不小的知名度镰官;

Vue.js

Angular.js是一套Google推出的JavaScript開發(fā)框架提前,誕生于2009年,該框架有著MVVM泳唠、模塊化狈网、自動(dòng)化雙向數(shù)據(jù)綁定、語義化標(biāo)簽笨腥、依賴注入等諸多核心特性拓哺;Angular的理念是 組建視圖(UI)和寫軟件邏輯可同時(shí)進(jìn)行,將DOM操作和應(yīng)用邏輯解耦扇雕,將測(cè)試開發(fā)同等看待拓售,將客戶端和服務(wù)器端解耦,在整個(gè)開發(fā)流程里都引導(dǎo)著開發(fā)者:從設(shè)計(jì)UI镶奉,到編寫業(yè)務(wù)邏輯础淤,再到測(cè)試。

Angular.js

React.jsFacebook 推出的JavaScript框架哨苛,起源于 Facebook 的內(nèi)部項(xiàng)目鸽凶,由于 React 的設(shè)計(jì)思想極其獨(dú)特,和Vue一樣建峭,React不是一個(gè)完整的MVC框架玻侥,很多人都認(rèn)為是MVC中的V(View)。此外亿蒸,React Native框架可用于開發(fā)跨平臺(tái)的App應(yīng)用凑兰,一套代碼便能同時(shí)運(yùn)行IOSAndroid

React.js

桌面軟件開發(fā)

通過對(duì)Chromium 的移植边锁,JavaScript還能用于開發(fā)桌面應(yīng)用姑食,典型應(yīng)用便是NW.jsElectron.js;都是使用HTML + CSS + JavaScript便能開發(fā)出同時(shí)在Linux茅坛,Mac OS XWindows上可運(yùn)行的桌面軟件音半。

Deno

今天,Deno 1.0 正式發(fā)布贡蓖,什么是Deno呢曹鸠?Deno是使用V8引擎并內(nèi)置于RustJavaScriptTypeScript的新運(yùn)行時(shí),致力于在Web瀏覽器之外執(zhí)行JavaScriptTypeScript程序斥铺。

Deno

它和Node.js的設(shè)計(jì)者是同一人:Ryan Dahl彻桃,是Ryan DahlNode.js之后的又一大作;Deno的設(shè)計(jì)特別注重安全仅父,有著眾多優(yōu)點(diǎn):

  1. Deno 是以安全為前提的叛薯,除非明確啟用浑吟,否則不會(huì)訪問文件、網(wǎng)絡(luò)或者環(huán)境耗溜;
  2. 在設(shè)計(jì)之初便充分考慮到了TypeScript组力,所以對(duì)TypeScript有著開箱即用的支持;
  3. 只提供一個(gè)可執(zhí)行文件抖拴;
  4. 內(nèi)置了很實(shí)用的程序燎字,如依賴檢查器(deno info)和代碼格式化器(deno fmt);
  5. 擁有一組經(jīng)過審核的標(biāo)準(zhǔn)模塊:deno.land/std阿宅,能和deno一起運(yùn)行候衍;

雖然都支持V8引擎,但Deno卻并不是Node.js的分支洒放,它甚至都不和Node(NPM)兼容蛉鹿;Deno是一個(gè)全新的JavaScriptTypeScript程序運(yùn)行時(shí),意在構(gòu)建更加安全和高效的JavaScriptTypeScript程序往湿,雖然目前和Node.js并不兼容妖异,Deno卻希望在將來能夠使用Deno來運(yùn)行更多的Node項(xiàng)目。

小結(jié)

縱觀JavaScript的發(fā)展领追,可謂感慨良多他膳!曾經(jīng)的JavaScript是命運(yùn)坎坷,還未出生就不受親生父親的待見绒窑,出生后更是常年被籠罩在Java 的陰影之下棕孙,甚至一度被認(rèn)為是Java 的補(bǔ)充;被卷入瀏覽器大戰(zhàn)些膨,差點(diǎn)被遺棄蟀俊。

但是好在它遇到了自己真正的歸宿:ECMA組織,不僅獲得了重生订雾,更是廣受開發(fā)者青睞欧漱,隨著Node.js的出現(xiàn),Vue.js葬燎、Angular.js、React.js蓬勃發(fā)展缚甩,JavaScript有了更大的應(yīng)用谱净;Deno的誕生,使得JavaScript已經(jīng)不僅限于Web瀏覽器擅威,又會(huì)掀起一場(chǎng)更大的互聯(lián)網(wǎng)革命壕探,讓我們拭目以待。

完結(jié)郊丛,老夫雖不正經(jīng)李请,但老夫一身的才華瞧筛!關(guān)注我,獲取更多編程科技知識(shí)导盅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末较幌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子白翻,更是在濱河造成了極大的恐慌乍炉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤馍,死亡現(xiàn)場(chǎng)離奇詭異岛琼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巢株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門槐瑞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阁苞,你說我怎么就攤上這事困檩。” “怎么了猬错?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵窗看,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我倦炒,道長(zhǎng)显沈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任逢唤,我火速辦了婚禮拉讯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳖藕。我一直安慰自己魔慷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布著恩。 她就那樣靜靜地躺著院尔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喉誊。 梳的紋絲不亂的頭發(fā)上邀摆,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音伍茄,去河邊找鬼栋盹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛敷矫,可吹牛的內(nèi)容都是我干的例获。 我是一名探鬼主播汉额,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼榨汤!你這毒婦竟也來了蠕搜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤件余,失蹤者是張志新(化名)和其女友劉穎讥脐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啼器,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旬渠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了端壳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告丢。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖损谦,靈堂內(nèi)的尸體忽然破棺而出岖免,到底是詐尸還是另有隱情,我是刑警寧澤照捡,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布颅湘,位于F島的核電站,受9級(jí)特大地震影響栗精,放射性物質(zhì)發(fā)生泄漏闯参。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一悲立、第九天 我趴在偏房一處隱蔽的房頂上張望鹿寨。 院中可真熱鬧,春花似錦薪夕、人聲如沸脚草。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏慨。三九已至,卻和暖如春姑隅,著一層夾襖步出監(jiān)牢的瞬間熏纯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工粤策, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人误窖。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓叮盘,卻偏偏與公主長(zhǎng)得像秩贰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柔吼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359