你好,JavaScript悼做!
現(xiàn)在是時(shí)候開始學(xué)習(xí)JavaScript了疯特。在本章中,我們將會(huì)介紹這門語言肛走,同樣也會(huì)建立起一個(gè)編程環(huán)境漓雅。我們同樣會(huì)編寫我們最初的JavaScript程序。
下面是本章要涉及到的內(nèi)容:
- 如何編程
- JavaScript的歷史
- 使用JavaScript編程所需的工具
- 控制臺(tái)中的JavaScript
- Web瀏覽器中的JavaScript
- 另一個(gè)更加復(fù)雜的JavaScript程序
如何編程
編程就是讓計(jì)算機(jī)做你想讓它做的事情羹与。一個(gè)計(jì)算機(jī)程序基本上是一系列告訴你的計(jì)算機(jī)如何執(zhí)行一個(gè)任務(wù)的指令故硅。不幸的是,計(jì)算機(jī)和我們說的語言不一樣纵搁,它們只使用1和0吃衅。最初的計(jì)算機(jī)是使用打孔卡來編程的,用打一個(gè)洞表示1腾誉,用不打洞來表示0徘层。機(jī)器碼和匯編代碼是與計(jì)算機(jī)硬件密切相關(guān)的低層語言。用它們來編程是十分困難的事利职,因?yàn)樗鼈儬可娴綄懪c計(jì)算機(jī)體系結(jié)構(gòu)緊密聯(lián)系的十分抽象的代碼趣效。
除此之外,高層編程語言使得我們能夠使用像函數(shù)和邏輯語句這樣的抽象猪贪,讓人類能夠更容易地讀和寫這些代碼跷敬。用C热押、C++斤寇、Java編寫的程序是先編譯成機(jī)器碼再執(zhí)行的拥褂。這些程序通常非衬锼快并且經(jīng)常用在速度至關(guān)重要的場(chǎng)合,像寫游戲和專業(yè)的商業(yè)軟件莫秆。
在運(yùn)行時(shí)被翻譯成機(jī)器碼的解釋過的高層語言經(jīng)常被稱為腳本語言悔详。一般情況下镊屎,它們比編譯型語言執(zhí)行得要慢,不過解釋器正在變得越來先進(jìn)伟端,使得編譯型語言和解釋型語言之間的界限越來越模糊杯道。
JavaScript
在這本書中我們將要學(xué)習(xí)的語言叫做JavaScript责蝠,經(jīng)常被稱為萬維網(wǎng)之語言萎庭。幾乎所有的Web瀏覽器可以運(yùn)行JavaScript,使得它成為世界上最流行的編程語言之一驳规。它只有很小的進(jìn)入門檻——你用于使用JavaScript編程的全部只是一款文本編輯器和一個(gè)網(wǎng)頁瀏覽器。雖然很容易上手医男,JavaScript也可以是一門難以使用的復(fù)雜語言捻勉,由于它有一些獨(dú)一無二的特性和有趣的怪癖舌胶。一旦你掌握了它董济,你就會(huì)發(fā)現(xiàn)這是一種能夠建造強(qiáng)大應(yīng)用程序的非常靈活透罢、有表現(xiàn)力的語言羽圃。
JavaScript是一種在運(yùn)行時(shí)編譯的高級(jí)語言抖剿。這意味著它需要一個(gè)負(fù)責(zé)解釋和運(yùn)行它們的引擎识窿。最常見的JavaScript引擎可以在Firefox愁憔、Chrome、Internet Explorer中找得到半抱,不過JavaScript也能夠不用瀏覽器運(yùn)行膜宋。很多現(xiàn)代的JavaScript引擎使用一種即時(shí)解釋(Just-in-time, JIT)的過程,這能夠大幅增加編譯過程的速度史简,使得程序運(yùn)行得更快肛著。
JavaScript也是一種動(dòng)態(tài)語言,這意味著構(gòu)成程序的元素能夠在運(yùn)行的過程中發(fā)生變化殉农。
JavaScript的歷史
萬維網(wǎng)(World Wide Web局荚,WWW)最初是由一些以超鏈接(hyperlink)相互連接的頁面組成。很快地人們想要更多的交互轮傍,因此首装,網(wǎng)景公司(Netscape簿盅,一家早期的瀏覽器廠商),請(qǐng)求Brendan Eich給他們的Navigator瀏覽器開發(fā)一種新的語言棚瘟。由于網(wǎng)景和微軟之間爭(zhēng)第一的激烈競(jìng)爭(zhēng)喜最,這項(xiàng)任務(wù)需要很快完成。于是Eich設(shè)法在十天之內(nèi)創(chuàng)建出了一個(gè)語言原型迷雪。為了做到這一點(diǎn),他向其他語言借鑒了各種不同的元素倦西,包括AWK赁严,Java,Perl卤档,Scheme程剥,HyperTalk和Self织鲸。這門新的語言最初被稱為LiveScript,不過它匆匆地就被重新命名為JavaScript琢唾,從而它能夠從Sun微系統(tǒng)的Java語言吸引的公共關(guān)注中受益盾饮。這個(gè)名字經(jīng)常不巧地致人困惑懒熙,即JavaScript經(jīng)常被認(rèn)為是Java的一個(gè)輕量級(jí)版本。這兩門語言實(shí)際上是沒有關(guān)系的徘钥,雖然JavaScript確實(shí)與Java有一些相同的語法肢娘。
1995年橱健,JavaScript在Netscape的Navigator瀏覽器的第二版上演了它的處女秀。次年臼节,微軟對(duì)JavaScript進(jìn)行了反向工程,以創(chuàng)建他們自己的版本巨税。它被稱為JScript以避免與擁有Java商標(biāo)的Sun微系統(tǒng)之間的版權(quán)問題粉臊,并且微軟把它授權(quán)給NetScape。JScript附帶于IE瀏覽器的第三個(gè)版本上远寸。它幾乎和JavaScript一樣——甚至連相同的缺陷和怪癖都包含了進(jìn)去犀盟,不過確實(shí)有一些IE獨(dú)家的額外特性阅畴。與此同時(shí),微軟將另一個(gè)叫作VBScript的腳本語言包含在IE瀏覽器中监署,盡管它從來沒真正地流行起來纽哥。
JavaScript(和JScript)立刻就受到了歡迎。它的使用門檻很低晓避,也相對(duì)容易學(xué)習(xí)只壳。這導(dǎo)致了它使用的爆炸性增加吼句,使得網(wǎng)頁變得動(dòng)態(tài)、更加具有交互性搞隐。遺憾的是远搪,它的低門檻同樣也是個(gè)詛咒,因?yàn)樗沟萌藗兛梢圆挥脤?duì)他們實(shí)際的所作所為有太多的理解就能夠?qū)懶〈a段味廊。代碼能夠很容易地被復(fù)制、粘貼柠新,而它們常常被人們以不正確的方式來使用辉巡,導(dǎo)致網(wǎng)絡(luò)上遍布很多很差的代碼示例郊楣。JavaScript同樣經(jīng)常被用來創(chuàng)建惱人的彈窗廣告,以及瀏覽器嗅探(檢測(cè)用戶用哪一個(gè)瀏覽器瀏覽網(wǎng)頁的過程)钥组,隨后它開始招致不好的名聲今瀑。
網(wǎng)景和Sun微系統(tǒng)公司決定在歐洲計(jì)算機(jī)制造商協(xié)會(huì)(European Computer Manufacturers Association橘荠,ECMA)的協(xié)助下對(duì)這門語言進(jìn)行標(biāo)準(zhǔn)化,也即將要主持這個(gè)標(biāo)準(zhǔn)的機(jī)構(gòu)挺份。這門經(jīng)標(biāo)準(zhǔn)化的語言被稱作ECMAScript贮懈,照舊是為了避免侵犯Sun的Java商標(biāo)。這引致了人們更大的困惑探赫,不過最終ECMAScript被用來指代規(guī)范撬呢,而JavaScript被用來(現(xiàn)在仍然是)指語言自身魂拦。
ECMAScript標(biāo)準(zhǔn)在某些地方解釋起來很困難搁嗓,因此JavaScript的實(shí)現(xiàn)在各種各樣的JavaScript引擎中可能會(huì)有所不同。這就是為什么有些Web瀏覽器在運(yùn)行JavaScript程序的時(shí)候表現(xiàn)出來的行為會(huì)不一樣荷愕。
瀏覽器戰(zhàn)爭(zhēng)
到Netscape Navigator 4 和Internet Explorer 4發(fā)布之時(shí)安疗,JavaScript已經(jīng)變得極其流行了。微軟已經(jīng)開始對(duì)動(dòng)態(tài)HTML怖现,或者簡稱為DHTML一詞的炒作玉罐。為了緊緊抓住這波流行吊输,網(wǎng)景和微軟設(shè)法增加新的專有特性,導(dǎo)致了不同語法的使用茫船。這場(chǎng)以增加新特性相較量的軍備競(jìng)賽以瀏覽器戰(zhàn)爭(zhēng)而聞名癣蟋。這場(chǎng)軍備競(jìng)賽令人遺憾的消極面是,為了在兩種瀏覽器中得到相同的結(jié)果濒生,程序員必須寫出兩種不同的版本罪治。專業(yè)的程序員經(jīng)常對(duì)JavaScript不屑一顧礁蔗,認(rèn)為它僅僅是一種玩具語言,不適合于任何嚴(yán)肅的編程晒骇。但是這是不公平的評(píng)判磺浙。語言本身不是問題撕氧,問題在于語言被實(shí)現(xiàn)和使用的方式。
最終剥啤,微軟在瀏覽器戰(zhàn)爭(zhēng)中取得了勝利,IE也占據(jù)了瀏覽器的主導(dǎo)地位刻诊。對(duì)標(biāo)準(zhǔn)的支持同樣也增加了富腊,極大程度上靠互聯(lián)網(wǎng)標(biāo)準(zhǔn)計(jì)劃(Web Standards Project, WaSP)的支持赘被。開發(fā)者和瀏覽器廠商開始一起工作,開始接受萬維網(wǎng)聯(lián)盟(W3C)和ECMA制訂的標(biāo)準(zhǔn)浮入。
開源瀏覽器火狐(FireFox)在2002年首次亮相羊异,2003年蘋果發(fā)行了他們的Safari瀏覽器野舶。他們都有很強(qiáng)的標(biāo)準(zhǔn)支持,這意味著開發(fā)者能夠利用JavaScript創(chuàng)造出在更佳的不同瀏覽器上表現(xiàn)一致的網(wǎng)頁應(yīng)用睹欲。
Web 2.0
2005年一屋,像谷歌地圖冀墨、Flickr和Gmail這樣的網(wǎng)站
開始出現(xiàn),并且證明了JavaScript能夠創(chuàng)建外觀和行為和原生桌面應(yīng)用一樣的豐富的因特網(wǎng)應(yīng)用蔚出。大約同一時(shí)期身冬,術(shù)語Ajax(異步JavaScript和XML的簡寫)由Jesse James Garrett創(chuàng)建出來岔乔。它描述了一種在后臺(tái)從服務(wù)端獲取數(shù)據(jù)滚躯,不需要重載整個(gè)網(wǎng)頁,只更新網(wǎng)頁的有關(guān)部分的一種技術(shù)茁影。這種技術(shù)使得用戶仍然能夠和頁面余下的部分交互募闲。這為用戶創(chuàng)建了更加無縫的瀏覽體驗(yàn),于是JavaScript開始被看作是一門強(qiáng)大而靈活得編程語言靴患,擁有著產(chǎn)生高質(zhì)量代碼的能力鸳君。
標(biāo)準(zhǔn)
隨著JavaScript語言正為更加復(fù)雜的應(yīng)用和瀏覽器能夠接受的標(biāo)準(zhǔn)所用患蹂,JavaScript版圖發(fā)生了變化传于。一場(chǎng)新的瀏覽器大戰(zhàn)開始了。但這時(shí)是有關(guān)哪一款瀏覽器能夠成為最與標(biāo)準(zhǔn)兼容的那一個(gè)平挑。與此同時(shí)盛末,提高集成在不同瀏覽器引擎中的速度的競(jìng)賽正在上演悄但。這場(chǎng)競(jìng)賽是從2008年谷歌的工程師開發(fā)在Chrome瀏覽器內(nèi)部運(yùn)行的V8引擎。它的速度比前一代的JavaScript引擎有大幅度提高助泽,這同時(shí)標(biāo)志著另一場(chǎng)軍備競(jìng)賽嚎京,其他的廠商紛紛以提高他們自己的JavaScript引擎做出了回應(yīng)鞍帝。JavaScript現(xiàn)在在瀏覽器當(dāng)中運(yùn)行的速度有了飛躍式的提升并且前進(jìn)的步伐沒有顯示出任何停下來的跡象。
HTML5
HTML5是最新的HTML規(guī)范摄凡,盡管它更像是一個(gè)所有在萬維網(wǎng)上運(yùn)用的最新技術(shù)的統(tǒng)稱亲澡。這包括了CSS3模塊,以及許許多多的利用JavaScript與網(wǎng)頁交互的API客情。這些將會(huì)在第十章中有更詳細(xì)的闡述癞己。
事實(shí)證明HTML5十分流行末秃,并且逐漸顯現(xiàn)出在web開發(fā)中的主導(dǎo)地位。JavaScript是它的一些更有趣方面運(yùn)行時(shí)起到關(guān)鍵作用的特性惰匙。
Node.js
2009年项鬼,Ryan Dahl開發(fā)了Node.js劲阎,它讓使用JavaScript編寫服務(wù)端應(yīng)用程序成為可能。它基于Google的V8引擎悯仙,并且在事件驅(qū)動(dòng)的環(huán)境中锡垄,它實(shí)現(xiàn)了非阻塞的輸入/輸出模型,這使得人們可以僅用JavaScript就構(gòu)建出快速而強(qiáng)大的實(shí)時(shí)Web應(yīng)用路操。這也致使很多根本不使用瀏覽器的應(yīng)用和JavaScript庫的出現(xiàn)屯仗。事實(shí)證明Node JS出人意料地受到歡迎搔谴,并且它的使用持續(xù)增長,這使得人們對(duì)JavaScript的興趣和運(yùn)用不斷增加峰弹,與此相伴的是你能在很多種場(chǎng)合都能發(fā)現(xiàn)JavaScript的身影垮卓。
Node.js的流行引致一個(gè)有趣現(xiàn)象的產(chǎn)生师幕,它被稱作“同構(gòu)JavaScript”霹粥,這牽涉到同樣的JavaScript代碼既可以在客戶端運(yùn)行也可以在服務(wù)端運(yùn)行,如果一個(gè)瀏覽器不能運(yùn)行這些代碼庙曙,它們同樣可以在服務(wù)器上運(yùn)行或者被下載下來捌朴,或者服務(wù)器不能運(yùn)行這些代碼张抄,它們可以在客戶端運(yùn)行署惯。
JavaScript的未來
除了僅僅使網(wǎng)頁具有交互性以外,對(duì)于JavaScript來說诡右,在制作越來越多應(yīng)用的過程中出現(xiàn)了一些激動(dòng)人心的時(shí)刻帆吻。目前成長最明顯的領(lǐng)域是單頁面應(yīng)用(Single Page Application, SPA)蜕依。這些應(yīng)用在瀏覽器中運(yùn)行样眠,并且很大程度上依賴于JavaScript。大量使用JavaScript的HTML5游戲正在變得越來越流行辫秧,尤其是瀏覽器的圖形功能一直在被改善盟戏。
JavaScript和HTML5技術(shù)可以用來開發(fā)瀏覽器擴(kuò)展、Windows8 桌面小部件邮旷,火狐OS和ChromeOS的應(yīng)用蝇摸。很多與web無關(guān)的應(yīng)用同樣使用JavaScript作為它們的腳本語言貌夕。JavaScript可以被用來向PDF文檔增加交互功能,創(chuàng)建HTML模板(Mustache)啡专,與數(shù)據(jù)庫交互(MongoDB)们童,甚至控制機(jī)器人(Cylon.js)病附!
很明顯JavaScript有很光明的前途,在web平臺(tái)持續(xù)成熟與演進(jìn)和JavaScript的使用不僅僅局限于瀏覽器之時(shí)域庇,JavaScript無疑能夠在未來的開發(fā)過程中保持著中心的地位。
一名忍者需要的編程環(huán)境
一命忍者不需要太多東西就可以拿JavaScript進(jìn)行編程了覆积。所有它需要的東西僅僅是一個(gè)文本編輯器和一個(gè)web瀏覽器听皿,諸如Firefox、Opera宽档、Internet Explorer尉姨、Safari,或者是Chrome吗冤。
JavaScript的版本
在本書中我們將使用ECMAScript的第五版又厉,并且假定你正在使用一款現(xiàn)代的瀏覽器(不管你喜歡哪款瀏覽器都可以,設(shè)法把它更新到最新的版本)椎瘟。不過不能指望用戶總是使用最新的版本覆致,所以我們?cè)囍赋鲈谳^舊的瀏覽器中某些代碼不能工作之處肺蔚。
文本編輯器
如果你使用Windows的話煌妈,記事本就很好了。如果你覺得它太過簡單,你也許會(huì)想要嘗試Notepad++璧诵,E TextEditor汰蜘,UltraEdit,或者是Sublime Text之宿。
如果你在使用一臺(tái)Mac族操,供選擇的有內(nèi)置的TextEdit,Text Wrangler, TextMate, 或者Atom text editor比被。你也可以使用Sublime Text坪创。
如果你使用Linux的話,你也不會(huì)對(duì)這些內(nèi)置的文本編輯器介意:諸如Gedit, Genie, Kate, Vim姐赡,或者是Emacs,你也可以使用E Text Editor 或者是Sublime Text
你也可以考慮使用一個(gè)集成開發(fā)環(huán)境(IDE)柠掂,比如說Eclipse, Coda, NetBeans, 或者在線的Cloud 9项滑。
瀏覽器控制臺(tái)
幾乎每個(gè)瀏覽器都可以運(yùn)行JavaScript并且最新的瀏覽器提供了一個(gè)能夠運(yùn)行JavaScript代碼片段的控制臺(tái)。下面是一些關(guān)于如何在一些最流行的瀏覽器的JavaScript控制臺(tái)中運(yùn)行JavaScript代碼的指南:
Chrome
菜單 > 更多工具 > 開發(fā)者工具涯贞,或者按Command + Option + J (Mac下)枪狂,或Ctrl +
Shift + J
Safari
按 **Command +Option + I
IE瀏覽器
按F12打開開發(fā)者工具,點(diǎn)擊控制臺(tái)標(biāo)簽宋渔。