JavaScript因?yàn)榛ヂ?lián)網(wǎng)而生,緊隨著瀏覽器的出現(xiàn)而問世〈氛希回顧它的歷史,就要從瀏覽器的歷史講起端考。
此處我們使用時間線的形式雅潭,簡單回顧這段輝煌的歷史:
1990年底,歐洲核能研究組織却特,發(fā)明了萬維網(wǎng)(World Wide Web)扶供。
1992年底,美國國家超級電腦應(yīng)用中心(NCSA)裂明,開發(fā)了第一個瀏覽器椿浓,Mosaic。
1994年10月闽晦,Mosaic通信公司成立扳碍,不久后改名為Netscape。開始開發(fā)面向普通用戶的新一代的瀏覽器 Netscape Navigator仙蛉。
1994年12月笋敞,Navigator發(fā)布了1.0版,市場份額一舉超過90%荠瘪。
Netscape公司很快發(fā)現(xiàn)夯巷,Navigator瀏覽器需要一種可以嵌入網(wǎng)頁的腳本語言,用來控制瀏覽器行為(表單驗(yàn)證)哀墓。管理層對這種瀏覽器腳本語言的設(shè)想是:功能不需要太強(qiáng)趁餐,語法較為簡單,容易學(xué)習(xí)和部署篮绰。
那一年后雷,正逢Sun公司的Java語言問世,市場推廣活動非常成功吠各。Netscape公司決定與Sun公司合作臀突,瀏覽器支持嵌入Java小程序(后來稱為Java applet)。
但是走孽,瀏覽器腳本語言是否就選用Java惧辈,則存在爭論琳状。后來磕瓷,還是決定不使用Java,因?yàn)榫W(wǎng)頁小程序不需要Java這么“重”的語法念逞。但是困食,同時也決定腳本語言的語法要接近Java,并且可以支持Java程序翎承。這些設(shè)想直接排除了使用現(xiàn)存語言硕盹,比如Perl、Python和TCL叨咖。
1995年瘩例,Netscape公司雇傭了程序員Brendan Eich開發(fā)這種網(wǎng)頁腳本語言啊胶。
Brendan Eich有很強(qiáng)的函數(shù)式編程背景,希望以Scheme語言(函數(shù)式語言鼻祖LISP語言的一種方言)為藍(lán)本垛贤,實(shí)現(xiàn)這種新語言焰坪。
1995年5月,Brendan Eich只用了10天聘惦,就設(shè)計(jì)完成了這種語言的第一版某饰。它是一個大雜燴,語法有多個來源:
基本語法:借鑒C語言和Java語言善绎。
數(shù)據(jù)結(jié)構(gòu):借鑒Java語言黔漂,包括將值分成原始值和對象兩大類。
函數(shù)的用法:借鑒Scheme語言和Awk語言禀酱,將函數(shù)當(dāng)作第一等公民炬守,并引入閉包。
原型繼承模型:借鑒Self語言(Smalltalk的一種變種)剂跟。
正則表達(dá)式:借鑒Perl語言劳较。
字符串和數(shù)組處理:借鑒Python語言。
二浩聋、JavaScript的發(fā)展
為了保持簡單观蜗,這種腳本語言缺少一些關(guān)鍵的功能,比如塊級作用域衣洁、模塊墓捻、子類型(subtyping)等等,但是可以利用現(xiàn)有功能找出解決辦法坊夫。這種功能的不足砖第,直接導(dǎo)致了后來JavaScript的一個顯著特點(diǎn):對于其他語言,你需要學(xué)習(xí)語言的各種功能环凿,而對于JavaScript梧兼,你常常需要學(xué)習(xí)各種解決問題的模式。而且由于來源多樣智听,從一開始就注定羽杰,JavaScript的編程風(fēng)格是函數(shù)式編程和面向?qū)ο缶幊痰囊环N混合體。
Netscape公司的這種瀏覽器腳本語言到推,最初名字叫做Mocha考赛。
1995年9月改為LiveScript。
12月莉测,Netscape公司與Sun公司(Java語言的發(fā)明者和所有者)達(dá)成協(xié)議颜骤,后者允許將這種語言叫做JavaScript。
這樣一來捣卤,Netscape公司可以借助Java語言的聲勢忍抽,而Sun公司則將自己的影響力擴(kuò)展到了瀏覽器八孝。
之所以起這個名字,并不是因?yàn)镴avaScript本身與Java語言有多么深的關(guān)系(事實(shí)上鸠项,兩者關(guān)系并不深)唆阿,而是因?yàn)镹etscape公司已經(jīng)決定,使用Java語言開發(fā)網(wǎng)絡(luò)應(yīng)用程序锈锤,JavaScript可以像膠水一樣驯鳖,將各個部分連接起來。當(dāng)然久免,后來的歷史是Java語言的瀏覽器插件失敗了浅辙,JavaScript反而發(fā)揚(yáng)光大。
1995年12月4日阎姥,Netscape公司與Sun公司聯(lián)合發(fā)布了JavaScript語言记舆。
1996年3月,Navigator 2.0瀏覽器正式內(nèi)置了JavaScript腳本語言呼巴。
使得Web獲得更高的關(guān)注泽腮,同時奠定了自己在瀏覽器屆的霸主地位。
如果事情一直這樣下去衣赶,那么NetScape可能依然是我們現(xiàn)代瀏覽器的霸主诊赊。
但是1996年8月互聯(lián)網(wǎng)巨頭微軟公司進(jìn)入瀏覽器領(lǐng)域,推出JScript府瞄,和NetScript公司開始爭奪博主地位碧磅。
1996年11月,Netscape公司決定將JavaScript提交給國際標(biāo)準(zhǔn)化組織ECMA(European Computer Manufacturers Association)
希望JavaScript能夠成為國際標(biāo)準(zhǔn)遵馆,以此抵抗微軟鲸郊。
1997年7月,ECMA組織發(fā)布262號標(biāo)準(zhǔn)文件(ECMA-262)的第一版货邓,規(guī)定了瀏覽器腳本語言的標(biāo)準(zhǔn)秆撮,并將這種語言稱為ECMAScript。這個版本就是ECMAScript 1.0版换况。
之所以不叫JavaScript职辨,一方面是由于商標(biāo)的關(guān)系,Java是Sun公司的商標(biāo)复隆,根據(jù)一份授權(quán)協(xié)議拨匆,只有Netscape公司可以合法地使用JavaScript這個名字姆涩,且JavaScript已經(jīng)被Netscape公司注冊為商標(biāo)挽拂,另一方面也是想體現(xiàn)這門語言的制定者是ECMA,不是Netscape骨饿,這樣有利于保證這門語言的開放性和中立性亏栈。因此台腥,ECMAScript和JavaScript的關(guān)系是,前者是后者的規(guī)格绒北,后者是前者的一種實(shí)現(xiàn)黎侈。在日常場合,這兩個詞是可以互換的闷游。
最終良性競爭意味著發(fā)展峻汉,隨著互聯(lián)網(wǎng)的日益更新,瀏覽器功能的日益完善脐往,配合越來越多元化的JavaScript休吠,給用戶帶來了前所未有的體驗(yàn)。
JavaScript在設(shè)計(jì)之初只是為了做表單驗(yàn)證业簿。但是現(xiàn)如今瘤礁,JavaScript已經(jīng)成為了一門功能全面的編程語言,已經(jīng)是WEB中不可缺少的一部分梅尤,如今的JavaScript是一門既簡單又復(fù)雜的語言柜思,說它簡單是因?yàn)榭赡芤恍r就能學(xué)會,但是如果你要真正掌握它巷燥,可能就得需要個幾年的時間了赡盘。
三、JavaScript的組成
當(dāng)瀏覽器之間的爭斗塵埃落定之后缰揪,各方之間也疲憊不堪亡脑,繁瑣的兼容問題不斷出現(xiàn),用戶已經(jīng)開始反彈邀跃。
最終由1961年成立的ECMA(European Computer Manufacturers Association, 中文稱歐洲計(jì)算機(jī)制造聯(lián)合會)制定標(biāo)準(zhǔn)霉咨。這個標(biāo)準(zhǔn)就是ECMAScript。
雖然標(biāo)準(zhǔn)已經(jīng)指定拍屑,但是因?yàn)镴avaScript自身的特殊性途戒,需要在瀏覽器中運(yùn)行,并操作同樣在瀏覽器中運(yùn)行的網(wǎng)頁(html)僵驰,所以喷斋,最終JavaScript被分成了三大模塊,分別是:
ECMAScript:代表了語言的標(biāo)準(zhǔn)蒜茴,規(guī)范星爪。描述了語言的基本語法(var、for粉私、if顽腾、array等)和數(shù)據(jù)類型(數(shù)字、字符串、布爾抄肖、函數(shù)久信、對象(obj、[]漓摩、{}裙士、null)、未定義(undefined))管毙。
BOM:代表了瀏覽器腿椎。描述了瀏覽器窗口的操作和使用,被稱為瀏覽器對象模型夭咬,抽象出的對象為window酥诽。因?yàn)槎喾綖g覽器之間并沒有達(dá)成統(tǒng)一的約定,所以BOM缺乏標(biāo)準(zhǔn)皱埠,建立在ECMAScript標(biāo)準(zhǔn)基礎(chǔ)上肮帐。
DOM:代表了頁面。描述了在瀏覽器中呈現(xiàn)給用戶視覺顯示的頁面的操作和使用边器,是 HTML 和 XML 的應(yīng)用程序接口(API)训枢。DOM 將把整個頁面規(guī)劃成由節(jié)點(diǎn)層級構(gòu)成的文檔,HTML 或 XML 頁面的每個部分都是一個節(jié)點(diǎn)的衍生物忘巧。被稱為文檔對象模型恒界,抽象出的對象為document。標(biāo)準(zhǔn)化規(guī)范為W3C提供砚嘴。