JavaScript說(shuō)分明

          Posted on 2006-03-02 20:09 killvin 閱讀(275) 評(píng)論(0)  編輯  收藏 所屬分類: javascript

          JavaScript說(shuō)分明 

          http://taiwan.cnet.com/enterprise/technology/0,2000062852,20103386,00.htm
          朱仲傑撰  2005/12/28

           

          最近因?yàn)锳JAX受到Google等網(wǎng)路服務(wù)業(yè)者的愛(ài)用而聲名大噪。也讓這個(gè)其實(shí)存在很久的程式語(yǔ)言再度成為討論話題。


          JavaScript可以說(shuō)是全世界使用最普遍的一個(gè)語(yǔ)言。雖然就統(tǒng)計(jì)資料(註)上來(lái)看,用JavaScript為主的專案數(shù)量只排在第九名,但我相信就應(yīng)用的層面來(lái)看,絕對(duì)遠(yuǎn)超過(guò)Java與.Net。JavaScript也是最讓人混淆的一個(gè)語(yǔ)言,即便是專業(yè)的網(wǎng)頁(yè)工程師,也不見(jiàn)得每位都能正確的了解它。網(wǎng)頁(yè)工程師對(duì)它又愛(ài)又恨,使用者最能體驗(yàn)到它所帶來(lái)的好處,但常常也是被它搞的昏頭轉(zhuǎn)向。到底它是個(gè)什麼樣神奇的語(yǔ)言呢?

          JavaScript的前世今生

          提到JavaScript,大家第一個(gè)聯(lián)想到的就是Java,但一切的誤解也就從這開(kāi)始。要說(shuō)它跟Java完全沒(méi)關(guān)係嘛,也不盡然。JavaScript原來(lái)的名稱叫LiveScript,是Netscape(網(wǎng)景)為了它的LiveWare平臺(tái)所發(fā)展出來(lái)的一套語(yǔ)言。後來(lái)之所以改名叫JavaScript,主要是因?yàn)楫?dāng)年Netscape與Sun合作,共同開(kāi)發(fā)網(wǎng)頁(yè)上的腳本語(yǔ)言,而剛好Sun正在開(kāi)發(fā)Java語(yǔ)言,初期而且也是以網(wǎng)頁(yè)上的應(yīng)用Java Applet為主,所以LiveScript也就改名為JavaScript。第一個(gè)擁有執(zhí)行JavaScript的瀏覽器Netscape 2.0,發(fā)表日期也跟Java一樣,同樣都是1995年,所以算起來(lái)今年也是JavaScript的十歲生日。

          JavaScript的版本非常多種,最原始的是由Netscape一路發(fā)展過(guò)來(lái)的,後來(lái)NetScape把它交給ECMA製定為標(biāo)準(zhǔn)(ECMA-262),而ECMA所製定出來(lái)的稱之為ECMAScript;最喜歡自己也搞一套的微軟,也有自訂的Jscript。理論上,有了標(biāo)準(zhǔn)大家就應(yīng)該要遵守,不過(guò)到目前看來(lái),實(shí)際上並非如此。各家瀏覽器相容的程度不一,造成現(xiàn)在混亂的局面,同一個(gè)網(wǎng)頁(yè)用不同的瀏覽器瀏覽有時(shí)結(jié)果不盡相同。

          JavaScript沒(méi)有你想像中的簡(jiǎn)單

          JavaScript是屬於prototype-based的一種語(yǔ)言,而prototype-based又是物件導(dǎo)向程式設(shè)計(jì)語(yǔ)言(Object-Oriented Programming Language)的一個(gè)分枝,所以嚴(yán)格說(shuō)起來(lái),JavaScript也是一種物件導(dǎo)向程式設(shè)計(jì)語(yǔ)言。光看到「物件導(dǎo)向」這四個(gè)字,我想很多人頭皮都已經(jīng)開(kāi)始發(fā)麻了,不過(guò)JavaScript之所以不簡(jiǎn)單並不是因?yàn)檫@一點(diǎn),而是因?yàn)樗慕Y(jié)構(gòu)鬆散和型態(tài)鬆散(loose typing)所導(dǎo)致。

          你若寫過(guò)Java程式的話或許就知道,Java程式必需要Java虛擬機(jī)器(JVM)上執(zhí)行,在執(zhí)行Java程式之前,它必需是被編譯過(guò)的;在編譯的過(guò)程中,Java會(huì)檢查許許多多的條件,例如最基本的語(yǔ)法、變數(shù)的宣告等等。

          JavaScript一樣得依存在一個(gè)容器(Container)中才能執(zhí)行,我們常見(jiàn)到的容器就是瀏覽器(Web Browser),跟Java不同的是,JavaScript的程式不需要事先編譯,它是屬於直譯式的語(yǔ)言,你可以把它想像成看到一行程式碼就執(zhí)行一行。因?yàn)樯倭司幾g時(shí)期的檢查,JavaScript就比Java「自由」許多,你可以在網(wǎng)頁(yè)上隨意的位置上安插JavaScript程式、可以隨意的建立新的變數(shù)來(lái)使用;你不用分清楚什麼是數(shù)值,什麼是字串、什麼又是物件,通通可以加加(+)在一起,這就會(huì)造成相當(dāng)不嚴(yán)謹(jǐn)?shù)拈_(kāi)發(fā)過(guò)程。

          自由是必需要付出代價(jià)的,前面提到相容性的混亂,在這又有語(yǔ)法結(jié)構(gòu)上的混亂,這下子可以說(shuō)是亂上加亂了。網(wǎng)頁(yè)工程師之所以對(duì)JavaScript又愛(ài)又恨,愛(ài)是因?yàn)橥高^(guò)適當(dāng)?shù)腏avaScript,可以在網(wǎng)頁(yè)上創(chuàng)造出許許多多特殊的效果,讓使用者在瀏覽這個(gè)網(wǎng)頁(yè)時(shí),能有更多的互動(dòng)。恨是因?yàn)槭袌?chǎng)上極少有以JavaScript為主的整合開(kāi)發(fā)工具(IDE),因?yàn)閯倓偹f(shuō)的混亂,造成JavaScript程式很難開(kāi)發(fā)和除錯(cuò)。

          JavaScript之所以普及,是因?yàn)閷慗avaScript程式的使用者,不見(jiàn)得是寫Java、C/C++、VB等受過(guò)基本程式設(shè)計(jì)訓(xùn)練的程式設(shè)計(jì)師,往往網(wǎng)頁(yè)的美工人員才是使用JavaScript的大宗。他們不會(huì)也沒(méi)時(shí)間去學(xué)習(xí)完整的JavaScript,而是有需要時(shí)才在網(wǎng)頁(yè)上東加一些、西加一點(diǎn),這些加上去的JavaScript可能是網(wǎng)頁(yè)編輯器所提供的元件、或是網(wǎng)路上分享出來(lái)的程式片段。JavaScript一點(diǎn)都不簡(jiǎn)單,只是大家都很偷懶,用最簡(jiǎn)單的方式來(lái)使用它罷了。

          AJAX應(yīng)用為JavaScript注入強(qiáng)心劑

          JavaScript十年來(lái)沒(méi)有特別受歡迎,因?yàn)閃WW盛行以來(lái)它和HTML一樣已變成網(wǎng)頁(yè)裡最基本的元素,直到AJAX的出現(xiàn),讓JavaScript大大的受到眾人的注視。AJAX的全名是 Asynchronous JavaScript and XML,JavaScript就是其中之一的主角,AJAX並不是一項(xiàng)新的技術(shù),而是將一些舊有的技術(shù)結(jié)合起來(lái)做一種巧妙的應(yīng)用,賦予網(wǎng)頁(yè)的一股新動(dòng)力。

          AJAX這個(gè)名詞最早是出現(xiàn)在Adaptive Path網(wǎng)站上,一篇由 Jesse James Garrett於2005年2月18號(hào)所寫的文章中所提出的(http://www.adaptivepath.com/publications/essays/archives/000385.php)。AJAX是客戶端(瀏覽器)的技術(shù),簡(jiǎn)單的說(shuō),就是用JavaScript與後端伺服器做資料的溝通,資料採(cǎi)用XML的格式,JavaScript動(dòng)態(tài)地從後端拿到XML格式的資料,重新整理、重組後再顯示到網(wǎng)頁(yè)上。AJAX基本上是無(wú)關(guān)Java或.Net的,甚至PHP也可以跟AJAX結(jié)合在一起使用。網(wǎng)路上、雜誌裡介紹AJAX的文章相當(dāng)?shù)亩?,在這我就不贅述。在這要提醒大家注意的是,因?yàn)锳JAX,JavaScript又開(kāi)始大量的應(yīng)用在網(wǎng)頁(yè)裡,前面所提及的混亂又被突顯了出來(lái)?;靵y不一定只是負(fù)面的,所謂時(shí)勢(shì)造英雄,我們期待有人能出來(lái)一統(tǒng)江湖。

          JavaScript的其它應(yīng)用

          JavaScript只能夠運(yùn)用在網(wǎng)頁(yè)上嗎?其實(shí)蘋果電腦(Apple)除了硬體上的創(chuàng)意外,在作業(yè)系統(tǒng)上的表現(xiàn)一直以來(lái)也是使用者的最愛(ài)。在新的Mac OS X 10.4裡,有個(gè)新的功能叫-Dashboard,它可以讓你執(zhí)行一些小程式,例如月曆、天氣預(yù)報(bào)、地圖查找等。這些小程式稱為Widget,而撰寫Widget的主要語(yǔ)言就是JavaScript,當(dāng)然還可以配合HTML、CSS甚至Java Applet。隨著Mac OS X的使用者日益成長(zhǎng),撰寫Widget已成為一個(gè)新興的軟體業(yè)。Dashboard其實(shí)不是第一個(gè)實(shí)踐這個(gè)概念的程式,早在Mac OS X 10.2時(shí),就有一個(gè)叫Konfabulator的軟體做出這樣的平臺(tái),在當(dāng)時(shí)大受歡迎。後來(lái)Apple在Mac OS X 10.4內(nèi)建一樣功能的Dashboard時(shí),還飽受外界的批評(píng)和指責(zé),認(rèn)為Apple是抄襲Konfabulator的。隨著Mac OS X直接支援Wedget,Konfabulator漸漸的淡出Mac的舞臺(tái)。不過(guò)Yahoo看上了它,把它給買了下來(lái),而在不久前重新推出Windows/Mac版的Yahoo!Webget,這下Windows的使用者也能享受Widget所帶來(lái)的便利和好處。

          下一步

          世界上有所謂的Java工程師、C/C++工程師、VB工程師等?,好像沒(méi)有JavaScript工程師這樣的頭銜,我個(gè)人覺(jué)得他應(yīng)該是被需要的。JavaScript其實(shí)並不好學(xué),教育訓(xùn)練是個(gè)商機(jī),開(kāi)發(fā)除錯(cuò)平臺(tái)也是一個(gè)商機(jī)。這年頭流行認(rèn)證,它也是可以著墨的,例如辦理類似SCJP、MCSE這樣的認(rèn)證考式(事實(shí)上是有JavaScript Certification,不過(guò)沒(méi)像其它認(rèn)證這麼有公信和正式就是了)。唯有專門的訓(xùn)練課程及認(rèn)證才能真正落實(shí)JavaScript的標(biāo)準(zhǔn)化,這樣寫出來(lái)的JavaScript程式才不會(huì)相容性不足,造成用某種瀏覽器才能觀看的特定網(wǎng)頁(yè)的情況。

          而另一種是像無(wú)障礙網(wǎng)頁(yè)這種的認(rèn)證,若你的網(wǎng)頁(yè)通過(guò)JavaScript相容性審合,那麼在網(wǎng)頁(yè)上就可以放上一個(gè)標(biāo)章,証明你的網(wǎng)頁(yè)是相容於各種瀏覽器的。以上這些如果能由國(guó)際大廠來(lái)推動(dòng),成功的機(jī)會(huì)才會(huì)比較大,好奇的是,這麼多年來(lái),怎麼沒(méi)人想幹這件事?!也許是吃力不討好吧。

          註: TIOBE Programming Community Index for December 2005 http://www.tiobe.com/tpci.htm 相關(guān)連結(jié):

          ECMA-262
          http://www.ecma-international.org/publications/standards/Ecma-262.htm

          Spidermonkey
          http://www.mozilla.org/js/spidermonkey/

          Rhino
          http://www.mozilla.org/rhino/

          Dashboard
          http://www.apple.com/macosx/features/dashboard/

          Yahoo!Wedgets
          http://widgets.yahoo.com/

          主站蜘蛛池模板: 枞阳县| 炉霍县| 于田县| 绥棱县| 淮阳县| 明星| 江油市| 孝义市| 五莲县| 湟中县| 抚远县| 泸定县| 泸州市| 石河子市| 昌黎县| 望都县| 容城县| 隆化县| 海安县| 长治市| 轮台县| 贞丰县| 浙江省| 宝坻区| 垣曲县| 田林县| 顺昌县| 迭部县| 蒲城县| 丹江口市| 井陉县| 成都市| 山东| 高安市| 横山县| 砀山县| 随州市| 大同市| 穆棱市| 新建县| 温州市|