W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
每當(dāng)我開(kāi)始閱讀一本很厚的書(shū),總是先問(wèn)自己,它值得我這樣做嗎?
讀完一本書(shū),就像完成一段旅程。有些旅程會(huì)讓你終身回憶,而另一些旅程讓你后悔不迭,不應(yīng)該將寶貴的生命浪費(fèi)在它之上。
所以我想,在讀者開(kāi)始閱讀這本教程之前,我最好也談?wù)劄槭裁匆獙W(xué)JavaScript,它有什么用?一方面,我不希望有人因?yàn)樽x了我的書(shū)而后悔;另一方面,這本教程的厚度也許讓人望而生畏,有些部分相對(duì)枯燥,還有些部分并不容易掌握,如果你清楚地知道閱讀的目的,將會(huì)比較容易堅(jiān)持下去。當(dāng)然,我可以保證,雖然這本教程很厚,但是沒(méi)有廢話,講的都是有用的東西。
總的來(lái)說(shuō),JavaScript語(yǔ)言有一些顯著特點(diǎn),使得它非常值得學(xué)習(xí)。它既適合當(dāng)作學(xué)習(xí)編程的入門(mén)語(yǔ)言,也適合當(dāng)作日常開(kāi)發(fā)的工作語(yǔ)言。它是目前最有希望、前途最光明的計(jì)算機(jī)語(yǔ)言之一。
JavaScript的發(fā)明目的,就是作為瀏覽器的內(nèi)置腳本語(yǔ)言,為網(wǎng)頁(yè)開(kāi)發(fā)者提供操控瀏覽器的能力。它是目前唯一一種通用的瀏覽器腳本語(yǔ)言,所有主流瀏覽器全部支持。它可以讓網(wǎng)頁(yè)呈現(xiàn)各種特殊效果,為用戶提供良好的互動(dòng)體驗(yàn)。
目前,全世界大部分網(wǎng)頁(yè)都使用JavaScript。如果不用,網(wǎng)站的易用性和使用效率將大打折扣,無(wú)法成為操作便利、對(duì)用戶友好的網(wǎng)站。
對(duì)于一個(gè)互聯(lián)網(wǎng)開(kāi)發(fā)者來(lái)說(shuō),如果你想提供漂亮的網(wǎng)頁(yè)、令用戶滿意的上網(wǎng)體驗(yàn)、各種基于瀏覽器的便捷功能、前后端之間緊密高效的聯(lián)系,JavaScript是必不可少的工具。
近年來(lái),JavaScript的使用范圍,慢慢超越了瀏覽器,正在向通用的系統(tǒng)語(yǔ)言發(fā)展。
(1)瀏覽器的平臺(tái)化
隨著HTML 5的出現(xiàn),瀏覽器本身的功能越來(lái)越強(qiáng),不再僅僅能瀏覽網(wǎng)頁(yè),而是越來(lái)越像一個(gè)平臺(tái),JavaScript因此得以調(diào)用許多系統(tǒng)功能,比如操作本地文件、操作圖片、調(diào)用攝像頭和麥克風(fēng)等等。這使得JavaScript可以完成許多以前無(wú)法想象的事情。
(2)Node.js
Node.js項(xiàng)目使得JavaScript可以用于開(kāi)發(fā)服務(wù)器端的大型項(xiàng)目,網(wǎng)站的前后端都用JavaScript開(kāi)發(fā)已經(jīng)成為了現(xiàn)實(shí)。有些嵌入式平臺(tái)(Raspberry Pi)能夠安裝Node.js,于是JavaScript就能為這些平臺(tái)開(kāi)發(fā)應(yīng)用程序。
(3)數(shù)據(jù)庫(kù)操作
JavaScript甚至也可以用來(lái)操作數(shù)據(jù)庫(kù)。NoSQL數(shù)據(jù)庫(kù)這個(gè)概念,本身就是在JSON(JavaScript Object Notation,JavaScript對(duì)象表示法)格式的基礎(chǔ)上誕生的,大部分NoSQL數(shù)據(jù)庫(kù)允許JavaScript直接操作?;赟QL語(yǔ)言的開(kāi)源數(shù)據(jù)庫(kù)PostgreSQL支持JavaScript作為操作語(yǔ)言,可以部分取代SQL查詢語(yǔ)言。
(4)跨移動(dòng)平臺(tái)
PhoneGap項(xiàng)目使得JavaScript可以開(kāi)發(fā)在多種移動(dòng)平臺(tái)(iOS和Android)上使用的應(yīng)用程序。Mozilla基金會(huì)的手機(jī)操作系統(tǒng)Firefox OS,更是直接將JavaScript作為操作系統(tǒng)的平臺(tái)語(yǔ)言。
(5)內(nèi)嵌腳本語(yǔ)言
越來(lái)越多的應(yīng)用程序,將JavaScript作為內(nèi)嵌的腳本語(yǔ)言,比如Adobe公司的著名PDF閱讀器Acrobat、Linux桌面環(huán)境GNOME 3。
(6)跨平臺(tái)的桌面應(yīng)用程序
Chromium OS、Windows 8等操作系統(tǒng)直接支持JavaScript編寫(xiě)應(yīng)用程序。Mozilla的Open Web Apps項(xiàng)目、Google的Chrome App項(xiàng)目、以及TideSDK項(xiàng)目,可以用來(lái)編寫(xiě)運(yùn)行于Windows、Mac OS和Android等多個(gè)桌面平臺(tái)的程序,不依賴瀏覽器。
(7)小結(jié)
可以預(yù)期,JavaScript最終將能讓你只用一種語(yǔ)言,就開(kāi)發(fā)出適應(yīng)不同平臺(tái)(包括桌面端、服務(wù)器端、手機(jī)端)的程序。根據(jù)2013年9月的統(tǒng)計(jì),JavaScript是本年度代碼托管網(wǎng)站Github上使用量排名第一的語(yǔ)言。
著名程序員Jeff Atwood甚至提出了一條“Atwood定律”:
“所有可以用JavaScript編寫(xiě)的程序,最終都會(huì)出現(xiàn)JavaScript的版本?!?Any application that can be written in JavaScript will eventually be written in JavaScript.)
相比學(xué)習(xí)其他語(yǔ)言,學(xué)習(xí)JavaScript有一些有利條件。
(1)學(xué)習(xí)環(huán)境無(wú)處不在。
只要有瀏覽器,就能運(yùn)行JavaScript程序;只要有文本編輯器,就能編寫(xiě)JavaScript程序。這意味著,幾乎所有電腦都原生提供JavaScript學(xué)習(xí)環(huán)境,不用另行安裝復(fù)雜的IDE(集成開(kāi)發(fā)環(huán)境)和編譯器。
(2)簡(jiǎn)單性。
相比其他腳本語(yǔ)言(比如Python或Ruby),JavaScript的語(yǔ)法相對(duì)簡(jiǎn)單一些,本身的語(yǔ)法特性并不是特別多。而且,那些語(yǔ)法中的復(fù)雜部分,也不是必需要學(xué)會(huì)。你完全可以只用簡(jiǎn)單命令,完成大部分的操作。
(3)與主流語(yǔ)言的相似性。
JavaScript的語(yǔ)法很類似C/C++和Java,如果學(xué)過(guò)這些語(yǔ)言(事實(shí)上大多數(shù)學(xué)校都教),JavaScript的入門(mén)會(huì)非常容易。
必須說(shuō)明的是,雖然核心語(yǔ)法不難,但是JavaScript的復(fù)雜性體現(xiàn)在另外兩個(gè)方面。
首先,它涉及大量的外部API。JavaScript要發(fā)揮作用,必須與其他組件配合,這些外部組件五花八門(mén),數(shù)量極其龐大,幾乎涉及網(wǎng)絡(luò)應(yīng)用的各個(gè)方面,掌握它們絕非易事。
其次,JavaScript語(yǔ)言有一些設(shè)計(jì)缺陷。某些地方相當(dāng)不合理,另一些地方則會(huì)出現(xiàn)怪異的運(yùn)行結(jié)果。學(xué)習(xí)JavaScript,很大一部分時(shí)間是用來(lái)搞清楚哪些地方有陷阱。Douglas Crockford寫(xiě)過(guò)一本有名的書(shū),名字就叫《JavaScript: The Good Parts》,言下之意就是這門(mén)語(yǔ)言不好的地方很多,必須寫(xiě)一本書(shū)才能講清楚。另外一些程序員則感到,為了更合理地編寫(xiě)JavaScript程序,就不能用JavaScript來(lái)寫(xiě),而必須發(fā)明新的語(yǔ)言,比如CoffeeScript、TypeScript、Dart這些新語(yǔ)言的發(fā)明目的,多多少少都有這個(gè)因素。
盡管如此,目前看來(lái),JavaScript的地位還是無(wú)法動(dòng)搖。加之,語(yǔ)言標(biāo)準(zhǔn)的快速進(jìn)化,使得JavaScript功能日益增強(qiáng),而語(yǔ)法缺陷和怪異之處得到了彌補(bǔ)。所以,JavaScript還是值得學(xué)習(xí),況且它的入門(mén)真的不難。
JavaScript的性能優(yōu)勢(shì)體現(xiàn)在以下方面。
(1)靈活的語(yǔ)法,表達(dá)力強(qiáng)。
JavaScript既支持類似C語(yǔ)言清晰的過(guò)程式編程,也支持靈活的函數(shù)式編程??梢杂脕?lái)寫(xiě)并發(fā)處理(concurrent)。這些語(yǔ)法特性已經(jīng)被證明非常強(qiáng)大,可以用于許多場(chǎng)合,尤其適用非同步編程。
JavaScript的所有值都是對(duì)象,這為程序員提供了靈活性和便利性。因?yàn)槟憧梢院芊奖愕?、按照需要隨時(shí)創(chuàng)造數(shù)據(jù)結(jié)構(gòu),不用進(jìn)行麻煩的預(yù)定義。
JavaScript的標(biāo)準(zhǔn)還是快速進(jìn)化中,并不斷合理化,并添加更適用的語(yǔ)法特性。
(2)支持編譯運(yùn)行。
JavaScript語(yǔ)言本身,雖然是一種解釋型語(yǔ)言,但是在現(xiàn)代瀏覽器中,JavaScript都是編譯后運(yùn)行。程序會(huì)被高度優(yōu)化,運(yùn)行效率接近二進(jìn)制程序。而且,JavaScript引擎正在快速發(fā)展,性能將越來(lái)越好。
(3)事件驅(qū)動(dòng)和非阻塞式設(shè)計(jì)。
JavaScript程序可以采用事件驅(qū)動(dòng)(event-driven)和非阻塞式(non-blocking)設(shè)計(jì),在服務(wù)器端適合高并發(fā)環(huán)境,普通的硬件就可以承受很大的訪問(wèn)量。
JavaScript是一種開(kāi)放的語(yǔ)言。它的標(biāo)準(zhǔn)是國(guó)際標(biāo)準(zhǔn),寫(xiě)得非常詳盡明確;主要的設(shè)計(jì)和實(shí)現(xiàn)都是開(kāi)放的,而且質(zhì)量很高;不屬于任何公司或個(gè)人,不存在版權(quán)和專利的問(wèn)題。
行業(yè)內(nèi)的主要公司都支持它,單單是解釋器就有好幾個(gè)品種,兼容性很好,不做調(diào)整或只做很小的調(diào)整,它編寫(xiě)的程序就能在所有瀏覽器上運(yùn)行。
全世界程序員都在使用JavaScript,它有著極大的社區(qū)、廣泛的文獻(xiàn)和圖書(shū)、豐富的代碼資源。絕大部分你需要用到的功能,都有多個(gè)開(kāi)源函數(shù)庫(kù)可供選用。
作為項(xiàng)目負(fù)責(zé)人,你不難招聘到數(shù)量眾多的JavaScript程序員;作為開(kāi)發(fā)者,你也不難找到一份JavaScript的工作。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: