JavaScript(通郴陈祝縮寫為JS)是一種高級的额获、解釋型的編程語言。JavaScript是一門基于原型你虹、頭等函數(shù)的語言丰嘉,是一門多范式的語言夯到,它支持面向?qū)ο蟪绦蛟O(shè)計,指令式編程饮亏,以及函數(shù)式編程耍贾。它提供語法來操控文本、數(shù)組路幸、日期以及正則表達式等荐开,不支持I/O,比如網(wǎng)絡(luò)简肴、存儲和圖形等晃听,但這些都可以由它的宿主環(huán)境提供支持。它已經(jīng)由ECMA(歐洲電腦制造商協(xié)會)通過ECMAScript實現(xiàn)語言的標準化[8]砰识。它被世界上的絕大多數(shù)網(wǎng)站所使用能扒,也被世界主流瀏覽器(Chrome、IE辫狼、Firefox初斑、Safari、Opera)支持膨处。
JavaScript與Java在名字或語法上都有很多相似性见秤,但這兩門編程語言從設(shè)計之初就有很大的不同砂竖,JavaScript的語言設(shè)計主要受到了Self(一種基于原型的編程語言)和Scheme(一門函數(shù)式編程語言)的影響[9]。在語法結(jié)構(gòu)上它又與C語言有很多相似(例如if條件語句鹃答、switch語句乎澄、while循環(huán)、do-while循環(huán)等)测摔。
在客戶端置济,JavaScript在傳統(tǒng)意義上被實現(xiàn)為一種解釋語言,但在最近锋八,它已經(jīng)可以被即時編譯(JIT)執(zhí)行舟肉。隨著最新的HTML5和CSS3語言標準的推行它還可用于游戲、桌面和移動應(yīng)用程序的開發(fā)和在服務(wù)器端網(wǎng)絡(luò)環(huán)境運行查库,如Node.js路媚。
JavaScript 的歷史
肇始于網(wǎng)景
1993年,國家超級電腦應(yīng)用中心(NCSA)發(fā)表了NCSA Mosaic樊销,這是最早流行的圖形接口網(wǎng)頁瀏覽器整慎,它在萬維網(wǎng)的普及上發(fā)揮了重要作用。1994年围苫,Mosaic的主要開發(fā)人員隨即創(chuàng)立了Netscape公司裤园,并雇用了許多原來的NCSA Mosaic開發(fā)者用來開發(fā)Netscape Navigator,該公司的目標是取代NCSA Mosaic成為世界第一的網(wǎng)頁瀏覽器剂府。在四個月內(nèi)拧揽,已經(jīng)占據(jù)了四分之三的瀏覽器市場,并成為1990年代互聯(lián)網(wǎng)的主要瀏覽器腺占。網(wǎng)景預(yù)見到網(wǎng)絡(luò)需要變得更動態(tài)淤袜。公司的創(chuàng)始人馬克·安德森認為HTML需要一種膠水語言,讓網(wǎng)頁設(shè)計師和兼職程序員可以很容易地使用它來組裝圖片和插件之類的組件衰伯,且代碼可以直接編寫在網(wǎng)頁標記中铡羡。
1995年,網(wǎng)景招募了布蘭登·艾克意鲸,目標是把Scheme語言嵌入到Netscape Navigator瀏覽器當(dāng)中烦周。但更早之前,網(wǎng)景已經(jīng)跟昇陽合作在Netscape Navigator中支持Java怎顾,這時網(wǎng)景內(nèi)部產(chǎn)生激烈的爭論读慎。后來網(wǎng)景決定發(fā)明一種與Java搭配使用的輔助腳本語言并且語法上有些類似,這個決策導(dǎo)致排除了采用現(xiàn)有的語言槐雾,例如Perl夭委、Python、Tcl或Scheme蚜退。為了在其他競爭提案中捍衛(wèi)JavaScript這個想法闰靴,公司需要有一個可以運作的原型。艾克在1995年5月僅花了十天時間就把原型設(shè)計出來了钻注。
最初命名為Mocha蚂且,1995年9月在Netscape Navigator 2.0的Beta版中改名為LiveScript,同年12月幅恋,Netscape Navigator 2.0 Beta 3中部署時被重命名為JavaScript杏死,當(dāng)時網(wǎng)景公司與昇陽電腦公司組成的開發(fā)聯(lián)盟為了讓這門語言搭上Java這個編程語言“熱詞”,因此將其臨時改名為JavaScript捆交,日后這成為大眾對這門語言有諸多誤解的原因之一淑翼。
微軟采納
微軟公司于1995年首次推出Internet Explorer,從而引發(fā)了與Netscape的瀏覽器大戰(zhàn)品追。微軟對Netscape Navigator解釋器進行了逆向工程玄括,創(chuàng)建了JScript,以與處于市場領(lǐng)導(dǎo)地位的網(wǎng)景產(chǎn)品同臺競爭肉瓦。JScript也是一種JavaScript實現(xiàn)遭京,這兩個JavaScript語言版本在瀏覽器端共存意味著語言標準化的缺失,發(fā)展初期泞莉,JavaScript的標準并未確定哪雕,同期有網(wǎng)景的JavaScript,微軟的JScript雙峰并峙鲫趁。除此之外斯嚎,微軟也在網(wǎng)頁技術(shù)上加入了不少專屬對象,使不少網(wǎng)頁使用非微軟平臺及瀏覽器無法正常顯示挨厚,導(dǎo)致在瀏覽器大戰(zhàn)期間網(wǎng)頁設(shè)計者通常會把“用Netscape可達到最佳效果”或“用IE可達到最佳效果”的標志放在主頁堡僻。
標準化
1996年11月,網(wǎng)景正式向ECMA(歐洲計算機制造商協(xié)會)提交語言標準疫剃。1997年6月苦始,ECMA以JavaScript語言為基礎(chǔ)制定了ECMAScript標準規(guī)范ECMA-262。JavaScript成為了ECMAScript最著名的實現(xiàn)之一慌申。除此之外陌选,ActionScript和JScript也都是ECMAScript規(guī)范的實現(xiàn)語言。盡管JavaScript作為給非程序人員的腳本語言蹄溉,而非作為給程序人員的腳本語言來推廣和宣傳咨油,但是JavaScript具有非常豐富的特性。
JavaScript 的設(shè)計思路
(1)借鑒C語言的基本語法柒爵;
(2)借鑒Java語言的數(shù)據(jù)類型和內(nèi)存管理役电;
(3)借鑒Scheme語言,將函數(shù)提升到"第一等公民"(first class)的地位棉胀;
(4)借鑒Self語言法瑟,使用基于原型(prototype)的繼承機制冀膝。
JavaScript 的10個設(shè)計缺陷
- 不適合開發(fā)大型程序
- 非常小的標準庫
- null和undefined
- 全局變量難以控制
- 自動插入行尾分號
- 加號運算符
- NaN
- 數(shù)組和對象的區(qū)分
- == 和 ===
- 基本類型的包裝對象
參考鏈接:
- JavaScript 的歷史 —— 維基百科
- JavaScript 誕生記 —— 阮一峰
- JavaScript 的10個設(shè)計缺陷 —— 阮一峰