JavaScript說分明

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

最近因為AJAX受到Google等網路服務業者的愛用而聲名大噪。也讓這個其實存在很久的程式語言再度成為討論話題。

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

JavaScript的前世今生

提到JavaScript,大家第一個聯想到的就是Java,但一切的誤解也就從這開始。要說它跟Java完全沒關係嘛,也不盡然。JavaScript原來的名稱叫LiveScript,是Netscape(網景)為了它的LiveWare平台所發展出來的一套語言。後來之所以改名叫JavaScript,主要是因為當年Netscape與Sun合作,共同開發網頁上的腳本語言,而剛好Sun正在開發Java語言,初期而且也是以網頁上的應用Java Applet為主,所以LiveScript也就改名為JavaScript。第一個擁有執行JavaScript的瀏覽器Netscape 2.0,發表日期也跟Java一樣,同樣都是1995年,所以算起來今年也是JavaScript的十歲生日。

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

JavaScript沒有你想像中的簡單

JavaScript是屬於prototype-based的一種語言,而prototype-based又是物件導向程式設計語言(Object-Oriented Programming Language)的一個分枝,所以嚴格說起來,JavaScript也是一種物件導向程式設計語言。光看到「物件導向」這四個字,我想很多人頭皮都已經開始發麻了,不過JavaScript之所以不簡單並不是因為這一點,而是因為它的結構鬆散和型態鬆散(loose typing)所導致。

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

JavaScript一樣得依存在一個容器(Container)中才能執行,我們常見到的容器就是瀏覽器(Web Browser),跟Java不同的是,JavaScript的程式不需要事先編譯,它是屬於直譯式的語言,你可以把它想像成看到一行程式碼就執行一行。因為少了編譯時期的檢查,JavaScript就比Java「自由」許多,你可以在網頁上隨意的位置上安插JavaScript程式、可以隨意的建立新的變數來使用;你不用分清楚什麼是數值,什麼是字串、什麼又是物件,通通可以加加(+)在一起,這就會造成相當不嚴謹的開發過程。

自由是必需要付出代價的,前面提到相容性的混亂,在這又有語法結構上的混亂,這下子可以說是亂上加亂了。網頁工程師之所以對JavaScript又愛又恨,愛是因為透過適當的JavaScript,可以在網頁上創造出許許多多特殊的效果,讓使用者在瀏覽這個網頁時,能有更多的互動。恨是因為市場上極少有以JavaScript為主的整合開發工具(IDE),因為剛剛所說的混亂,造成JavaScript程式很難開發和除錯。

JavaScript之所以普及,是因為寫JavaScript程式的使用者,不見得是寫Java、C/C++、VB等受過基本程式設計訓練的程式設計師,往往網頁的美工人員才是使用JavaScript的大宗。他們不會也沒時間去學習完整的JavaScript,而是有需要時才在網頁上東加一些、西加一點,這些加上去的JavaScript可能是網頁編輯器所提供的元件、或是網路上分享出來的程式片段。JavaScript一點都不簡單,只是大家都很偷懶,用最簡單的方式來使用它罷了。

AJAX應用為JavaScript注入強心劑

JavaScript十年來沒有特別受歡迎,因為WWW盛行以來它和HTML一樣已變成網頁裡最基本的元素,直到AJAX的出現,讓JavaScript大大的受到眾人的注視。AJAX的全名是 Asynchronous JavaScript and XML,JavaScript就是其中之一的主角,AJAX並不是一項新的技術,而是將一些舊有的技術結合起來做一種巧妙的應用,賦予網頁的一股新動力。

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

JavaScript的其它應用

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

下一步

世界上有所謂的Java工程師、C/C++工程師、VB工程師等?,好像沒有JavaScript工程師這樣的頭銜,我個人覺得他應該是被需要的。JavaScript其實並不好學,教育訓練是個商機,開發除錯平台也是一個商機。這年頭流行認證,它也是可以著墨的,例如辦理類似SCJP、MCSE這樣的認證考式(事實上是有JavaScript Certification,不過沒像其它認證這麼有公信和正式就是了)。唯有專門的訓練課程及認證才能真正落實JavaScript的標準化,這樣寫出來的JavaScript程式才不會相容性不足,造成用某種瀏覽器才能觀看的特定網頁的情況。

而另一種是像無障礙網頁這種的認證,若你的網頁通過JavaScript相容性審合,那麼在網頁上就可以放上一個標章,証明你的網頁是相容於各種瀏覽器的。以上這些如果能由國際大廠來推動,成功的機會才會比較大,好奇的是,這麼多年來,怎麼沒人想幹這件事?!也許是吃力不討好吧。

註: TIOBE Programming Community Index for December 2005 http://www.tiobe.com/tpci.htm 相關連結:

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/

JavaScript說分明相关推荐

  1. 修改buffalo代码一

    Buffalo介绍 Web正随着Amowa/Ajax的引入开发开始变得有趣! Buffalo是Amowa思想实现的关键组件.Buffalo中定义了Web远程调用的传输基础,并且将远程调用对象完整的序列 ...

  2. 入門篇-耦合Coupling AC/DC/GND差別在哪

    摘自:https://www.strongpilab.com/?p=156 [示波器操作]入門篇-耦合Coupling AC/DC/GND差別在哪 2016-06-26 儀器 Instrument,  ...

  3. 使用Blackbird开源JavaScript库時,在IE6+、IE7下無法使用問題說明

    在新聞 [url]http://www.iteye.com/news/3832-goodbye-alert-the-use-of-new-information-pop-up-box[/url] 發布 ...

  4. 好多Javascript日期选择器呀-7

    the Coolest DHTML Calendar 最特別的在於按下月份跟年份的加減按鈕不放,就可以選擇該項目.但實際上按著左鍵拖曳實在是一件很累的事,而且不懂電腦的 End-user 根本就不知道 ...

  5. 参悟JavaScript

    引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个 ...

  6. 悟透 JavaScript

    为什么80%的码农都做不了架构师?>>>    悟透 JavaScript Posted on 2008-02-25 13:32 李战 引子 编程世界里只存在两种基本元素,一个是数据 ...

  7. 李战:悟透JavaScript 【转】

    多年前,曾经看过李战大师的"悟透delphi-delphi的原子世界",一直对大师特有的文笔风格记忆犹新,今天无意又看到了大师的"李战:悟透JavaScript" ...

  8. 悟透JavaScript (强烈推荐)

    2019独角兽企业重金招聘Python工程师标准>>> 引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. ...

  9. javascript 编程思想

    为什么80%的码农都做不了架构师?>>>     JavaScript中的数据很简洁的.简单数据只有 undefined, null, boolean, number和string这 ...

最新文章

  1. 自动驾驶测试:MIL、SIL、PIL、HIL
  2. html无效标签但是仍然能用,html 标签失效怎么办
  3. 设计模式(五)责任链模式
  4. Andrew Ng机器学习课程14(补)
  5. Java黑皮书课后题第7章:*7.12(倒置数组)7.7节中的reverse方法通过复制到新数组实现倒置。改写方法将参数中传递的数组倒置,并返回该数组。编写一个测试程序,输入10个数字,倒置它们并显示
  6. GIT Windows服务端搭建笔记
  7. Chatbot大牛推荐:AI、机器学习、深度学习必看9大入门视频
  8. linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. (cljs/run-at (JSVM. :all) 细说函数)
  10. 继续跟上--“永远不要对一个外行聊你的专业”
  11. ElasticSearch搜索底层基础原理总结
  12. SpringMVC学习笔记(1)-SpringMVC介绍
  13. 国内外有哪些有前景的 AR VR公司?
  14. 【转载】制作一个超精简的WIN7.gho
  15. linpack实验:MPI代码调优
  16. jle汇编_X86汇编指令
  17. 量子计算机 叉院,清华团队首次实现量子GAN 准确率98.8%
  18. 女人血气不足很伤身体 做这5步立马解决
  19. C语言——判断是否被5整除
  20. windows下对python的pip更新到最新版本

热门文章

  1. org.apache.ibatis.session.defaults.DefaultSqlSession@4f9e6460] was not registered for synchronizatio
  2. 从万达百货到家乐福中国,苏宁如何快速消化“大块头”?
  3. 基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
  4. T(n)=25T(n/5)+n*n的时间复杂度
  5. 最小生成树(Prim算法,Kruskal算法)
  6. 关于一种新的空气内新冠病毒检测方式的诸多设想
  7. 点击免费领取视频拍摄和剪辑教程
  8. python workflow_Alfred 使用 Python 创建自己的 Workflow
  9. PlusFo分析:传统金融与区块链金融的区别
  10. GMTC-闲鱼Flutter实践效果访谈