Javascript近日心得整理


前言

前些日子,寫了一個Joomla!用的編輯器外掛 - EpicEditor。說是我寫的就太超過了,事實上是"整合"和"調整"比較適合,講白話一點就是拿一些合用的零組件拼裝一翻。編輯器原本就是用Javascript開發,不意外,不過在我"組裝"的過程中,我發覺我花在搞定Javascript的時間上,大概比PHP多了五倍以上,這個意思是代表它很難搞定,還是事實上它在程式中的重要性比想像中高很多。

我們經常會看到Javascript主要應用在網站介面上,在這個層面,幾乎沒有任何一套程式語言可以取代它的地位,在今天愈來愈重視"UI"、"使用者經驗"的網站市場,花時間在Javascript程式語言的時間當然會變更多了。而像PHP程式語言這種已經固定式(尤其使用了程式框架之類),終端使用者看不到的東西,依照模式按步就班的寫也不差太多。以下為個人感想:

Javascript是個很怪異的程式語言

如果你學過純正的Javascript,我指的並不是用起來那麼快活的jQuery之類的函式庫,你會覺得這個程式語言的語法與現行流行的像C++、PHP或Java似乎不太一樣,反而是自成一格的。

它在初生長期,有點像是在瀏覽器中的小屁孩,很輕易的你可以造成記憶體的漏尿失(Memory Leak),特別是在和它存在感一樣持久的IE6中。Javascript存在時間非常久了,和你熟知的一些程式語言像Java之類的差不多久,不過它比較特別的是,就像是個精靈族用的程式語言,過了這麼久還是沒什麼變,至少也沒變老,不過粉絲一樣是很多,甚至近年有成長的趨勢。對於大部份的程式設計師而言,Javascript有點像是家鄉小調,每個人隨時都可以來秀個一段(歐巴馬成為第一位寫程式的美國總統,用Javascript),它的容易使用及普遍性可見一般。

以下就說說它的一些想法:

易學易用

有人說Javascript的"易學易用"正是它最大的優點,也是最大的缺點。

JSON的創始者Douglas Crockford寫的"JavaScript, The Good Parts"(中譯:優良部分)大概都是Amazon在「Javascript」、「軟體設計及工程類」與「網站設計類」的前1~10名。想像需要寫本書(或看本書)來了解它的"優良部份",就知道那些"不優良部份"還真的不少…。

大公司或組織們不是沒想過,用自家的其他更多"優良"的程式語言來取代它,經過了這麼多年,說實在的沒一個能上得了台面的。不論你要說Javascript有多爛,或是說你家的有多好。不要忘了,Javascipt累積了龐大的使用者族群,實際上一開始它的目標對象,就是設定針對網站設計領域的"設計師"們,而不是"程式工程師"們,所以在語言特性上經過特殊的設計與簡化。讓它更於學習與使用。

無人領養?

Javascript打從出生後,當時的父母是寄與厚望,取了一個八竿子打不上邊的"Javaxxx"名字。但在渡過網路泡沫化的黑暗時期,後來Web 2.0加上網路倍速成長,Javascript又受到眾多注目的眼光,但是卻是改成父母不詳的現況。沒人能說得上來,現在是由那個大公司或大組織認養的,其實反過來說,是每家大公司或大組織都想要"主導"它的"標準",變成大家認養的。也因為如此,表面上雖然是由ECMA組織來製定所謂的標準,實際上是由各大企業或組織自行發展,尤其是和網路或瀏覽器相關的Google、Apple、Microsoft、 Mozilla、Opera等等各大企業或組織,都有實作自己的引擎部份。網路這塊是現在的兵家必爭之地,現在在瀏覽器市場也是非常蓬勃發展的情況。

在大公司的互相競爭的角力下,在HTML5立訂標準後,有很大一部份的功能都是要用它來配合實作的,等於說幾乎是確立了它在未來網路世界的地位。

鋼鐵人

現今的Javascript已經不是從前那個小屁孩,只能用來作作表單檢查,然後跳出一個十分醜的警告視窗這種事。穿上鋼鐵衣之後的東尼史塔克,除了可以在天上飛之外,也可以和綠巨人浩克比劃一下腕力。

Javascript具有簡易擴充的能力,像為人熟知的jQueryBackbone.jsUnderscore.jsAngularJS函式庫,充份的擴充了不足的部份,增加更多的語法糖。

再藉由像跑車般的V8引擎,Javascript甚至延申了應用的觸角到伺服器的領域,這是讓人覺得更怪的地方,雖然它也有一段時間了。之前這個領域的霸主們,大概都大吃一驚。這是個很酷的應用,而且如果能挾Javascript的龐大使用者群體,說不定可以讓它在這個領域也佔有一席之地。(我這樣說其實很保守,看看哪些大企業使用Node.JS

Javascript沒問題,有問題的是你(我)

既然語言本身就是這樣了,另一個思考的方向充滿了現在的氛圍:

再好的程式語言如果用很爛的方式寫,也是照樣鳥掉

好吧,那就這樣了,那怎麼發揮它的"優良部份"呢?現在在Javascript領域中,出現了各式各樣"輔助"措施,讓Javascript程式碼更朝向光明面一方:

結論

JavaScript is built on some very good ideas and a few very bad ones.

~ 出自 JavaScript, The Good Parts