提起JavaScript
齿诞,很多開發(fā)者應(yīng)該都很熟悉了酸休,因?yàn)檫@門語言在語言排行榜上常年霸榜;不僅如此祷杈,JavaScript
在web
開發(fā)中占據(jù)著舉足輕重的地位斑司,開發(fā)者眾多,數(shù)量上已經(jīng)快要超過Java
開發(fā)者了,開發(fā)社區(qū)非乘薰危活躍互站,越來越多的優(yōu)秀開發(fā)框架涌現(xiàn),比如Vue僵缺、React胡桃、Angular
等,深受企業(yè)和開發(fā)者們的信賴磕潮。
盡管如今的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)來訪問看峻,使得這種情況得到大大改善阶淘。
1992 年
,Nombas
公司開發(fā)了一種腳本語言: Cmm
(C-minus-minus
互妓,中文翻譯為C減減
溪窒,簡(jiǎn)稱 Cmm
),盡管Cmm
在命名上和C++
有些類似冯勉,但和C++
卻是完全不同的語言澈蚌,Cmm
是一門可以替代宏操作的腳本語言,在語法上與 C
和 C ++
很高的相似度灼狰。
Nombas
公司為Cmm
腳本語言開發(fā)了運(yùn)行環(huán)境: CEnvi
宛瞄,通過下載CEnvi
,便能在網(wǎng)頁中嵌入Cmm
腳本語言交胚,Cmm
的出現(xiàn)使得客戶端腳本語言有了雛形份汗。盡管后來Nombas
把 Cmm
的名字改成了 ScriptEase
盈电,也僅僅是改了名字,雖然名字叫ScriptEase
杯活,但他和JavaScript
卻沒有任何關(guān)系匆帚,更不是JavaScript
語言的源頭。
1992年底
旁钧,美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心(NCSA
)開發(fā)了史上第一個(gè)瀏覽器卷扮,叫做 Mosaic
;Mosaic
瀏覽器不僅可以通過互聯(lián)網(wǎng)訪問網(wǎng)頁均践,同時(shí)也可以顯示圖片晤锹,從此網(wǎng)頁可以在圖形界面的窗口瀏覽,瀏覽器時(shí)代正式開啟彤委。
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
殺手。
1994年12月
闸氮,Navigator
發(fā)布了1.0
版剪况,一經(jīng)發(fā)布就取得了巨大成功,在短短的4
個(gè)月里就占據(jù)了 90%
的瀏覽器市場(chǎng)蒲跨,短期甚至內(nèi)成為了默認(rèn)瀏覽器译断;同時(shí),Nombas
也發(fā)布了CEnvi
的首個(gè)可用版本或悲。
上網(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è)的青睞。
網(wǎng)景公司管理層也動(dòng)了心纺弊,決定與Sun
公司合作牛欢,不僅允許Java
程序以applet
(小程序)的形式,直接在瀏覽器中運(yùn)行淆游;甚至還考慮直接將Java
作為腳本語言嵌入網(wǎng)頁傍睹,但由于Java
語言過于龐大,并不適合嵌入瀏覽器中犹菱,才不得不放棄拾稳。
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ì)Java
和 OOP
并不感冒;
當(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ì)外宣傳 JavaScript
是 Java
的補(bǔ)充,屬于輕量級(jí)的 Java
兜粘,專門用來操作網(wǎng)頁申窘,實(shí)現(xiàn)動(dòng)態(tài)效果。
JavaScript 和 Java
盡管名字里都有Java
孔轴,但Java
和JavaScript
是兩種不同的語言剃法,這兩種語言有一定的相似性,因?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
)的繼承鏈玉凯。
另外,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)的。
大戰(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
得益于 KDE
的 KHTML
和 KJS
谣沸,蘋果公司也開發(fā)了自家的JavaScript
引擎:Webkit
渲染引擎刷钢,蘋果公司不僅將Webkit
渲染引擎開源免費(fèi) ,而且還基于Webkit
渲染引擎開發(fā)了 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)制程序举农。
不久之后荆针,谷歌便以 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í)存在玖媚,分別是:
-
Netscape Navigator 3中的 JavaScript
箕肃; -
IE 中的 JScript
; -
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)的JavaScript
,ECMA
組織也不同于網(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
被更多開發(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)用程序灸异。
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
具有高效靈活的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
發(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ó)外都有著不小的知名度镰官;
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è)試。
React.js
是Facebook
推出的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)行IOS
和Android
。
桌面軟件開發(fā)
通過對(duì)Chromium
的移植边锁,JavaScript
還能用于開發(fā)桌面應(yīng)用姑食,典型應(yīng)用便是NW.js
和Electron.js
;都是使用HTML + CSS + JavaScript
便能開發(fā)出同時(shí)在Linux
茅坛,Mac OS X
和Windows
上可運(yùn)行的桌面軟件音半。
Deno
今天,Deno 1.0
正式發(fā)布贡蓖,什么是Deno
呢曹鸠?Deno
是使用V8
引擎并內(nèi)置于Rust
的JavaScript
和TypeScript
的新運(yùn)行時(shí),致力于在Web
瀏覽器之外執(zhí)行JavaScript
和TypeScript
程序斥铺。
它和Node.js
的設(shè)計(jì)者是同一人:Ryan Dahl
彻桃,是Ryan Dahl
繼Node.js
之后的又一大作;Deno
的設(shè)計(jì)特別注重安全仅父,有著眾多優(yōu)點(diǎn):
-
Deno
是以安全為前提的叛薯,除非明確啟用浑吟,否則不會(huì)訪問文件、網(wǎng)絡(luò)或者環(huán)境耗溜; - 在設(shè)計(jì)之初便充分考慮到了
TypeScript
组力,所以對(duì)TypeScript
有著開箱即用的支持; - 只提供一個(gè)可執(zhí)行文件抖拴;
- 內(nèi)置了很實(shí)用的程序燎字,如依賴檢查器(
deno info
)和代碼格式化器(deno fmt
); - 擁有一組經(jīng)過審核的標(biāo)準(zhǔn)模塊:
deno.land/std
阿宅,能和deno
一起運(yùn)行候衍;
雖然都支持V8
引擎,但Deno
卻并不是Node.js
的分支洒放,它甚至都不和Node(NPM)
兼容蛉鹿;Deno
是一個(gè)全新的JavaScript
和TypeScript
程序運(yùn)行時(shí),意在構(gòu)建更加安全和高效的JavaScript
和TypeScript
程序往湿,雖然目前和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í)导盅。