讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 第1章 JavaScript語言基礎 >

第1章 JavaScript語言基礎

對於任何語言來說,如何選用代碼的寫法和算法最終會影響到執行效率。與其他語言不同,由於JavaScript可用資源有限,所以規範和優化更為重要。代碼結構是執行速度的決定因素之一:代碼量少,運行速度不一定快;代碼量多,運行速度也不一定慢。性能損失與代碼的組織方式及具體問題的解決辦法直接相關。

程序通常由很多部分組成,具體表現為函數、語句和表達式,它們必須準確無誤地按照順序排列。優秀的程序應該擁有前瞻性的結構,可以預見到未來所需要的修改。優秀的程序也有一種清晰的表達方式。如果一個程序被表達得很好,那麼它更容易被理解,進而能夠成功地被修改或修復。JavaScript代碼經常被直接發佈,因此它應該自始至終具備發佈質量。整潔是會帶來價值的,通過在一個清晰且始終如一的風格下編寫的程序會更易於閱讀。

JavaScript的弱類型和過度寬容特徵,沒有為程序質量帶來安全編譯時的保證,為了彌補這一點,我們應該按嚴格的規範進行編碼。JavaScript包含大量脆弱的或有問題的特性,這些會妨礙編寫優秀的程序。我們應該避免JavaScript中那些糟糕的特性,還應該避免那些通常很有用但偶爾有害的特性。這樣的特性讓人既愛又恨,避免它們就能避免日後開發中潛在的錯誤。

建議1:警惕Unicode亂碼

ECMA標準規定JavaScript語言基於Unicode標準進行開發,JavaScript內核完全採用UCS字符集進行編寫,因此在JavaScript代碼中每個字符都使用兩個字節來表示,這意味著可以使用中文來命名變量或函數名,例如:


var人名="張三";

function睡覺(誰){

alert(誰+":快睡覺!都半夜三更了。");

}

睡覺(人名);


雖然ECMAScript v3標準允許Unicode字符出現在JavaScript程序的任何地方,但是在v1和v2中,ECMA標準只允許Unicode字符出現在註釋或引號包含的字符串直接量中,在其他地方必須使用ASCII字符集,在ECMAScript標準化之前,JavaScript通常是不支持Unicode編碼的。考慮到JavaScript版本的兼容性及開發習慣,不建議使用漢字來命名變量或函數名。

由於JavaScript腳本一般都「寄宿」在網頁中,並最終由瀏覽器來解析和執行,因此在考慮到JavaScript語言編碼的同時,還要顧及嵌入頁面的字符編碼,以及瀏覽器支持的編碼。不過現在的瀏覽器一般都支持不同類型的字符集,只需要考慮頁面字符編碼與JavaScript語言編碼一致即可,否則就會出現亂碼現象。

當初設計JavaScript時,預計最多會有65 536個字符,從那以後慢慢增長到了一百萬個字符。JavaScript字符是16位的,這足夠覆蓋原有的65 536個字符,剩下的百萬字符中的每一個都可以用一對字符來表示。

Unicode把一對字符視為一個單一的字符,而JavaScript認為一對字符是兩個不同的字符,這將會帶來很多問題,考慮到代碼的安全性,我們應該盡量使用基本字符進行編碼。