作者:Douglas Crockford
譯者:cloudwater
更新:2009-12-13 01:08:29
軟體的長期價值直接源于其編碼品質。在它的整個生命周期裡,一個程式可能會被許多人閱讀或修改。如果一個程式可以清晰的展現出它的結構和特征,那就能減少在以後對其進行修改時出錯的可能性。
程式設計規範可以幫助程式員們增加程式的健壯性。
所有的JavaScript代碼都是暴露給公衆的。是以我們更應該保證其品質。
保持整潔很重要。
JavaScript程式應獨立儲存在字尾名為.js的檔案中。
JavaScript代碼不應該被包含在HTML檔案中,除非這是段特定隻屬于此部分的代碼。在HTML中的JavaScript代碼會明顯增加檔案大小,而且也不能對其進行緩存和壓縮。
<code><script src=</code>filename<code>.js></code>應盡量放到body的後面。這樣可以減少因為載入script而造成其他頁面内容載入也被延遲的問題。也沒有必要使用language或者type屬性。MIME類型是由伺服器而非scripttag來決定的。
縮進的機關為四個空格。避免使用Tab鍵來縮進(即使現在已經是21世紀了),也始終沒有個統一的Tab長短标準。雖然使用空格會增加檔案的大小,但在區域網路中幾乎可以忽略,且在最小化過程中也可被消除掉。
避免每行超過80個字元。當一條語句一行寫不下時,請考慮折行。在運算符号,最好是逗号後換行。在運算符後換行可以減少因為複制粘貼産生的錯誤被分号掩蓋的幾率。下一行應該縮進8個空格。
不要吝啬注釋。給以後需要了解你的代碼的人們(或許就是你自己)留下資訊是非常有用的。注釋應該和它們所注釋的代碼一樣是書寫良好且清晰明了。偶爾的小幽默就更不錯了。記得要避免冗長或者情緒化。
及時地更新注釋也很重要。錯誤的注釋會讓程式更加難以閱讀和了解。
讓注釋有意義。重點在解釋那些不容易立即明白的邏輯上。不要把讀者的時間浪費在閱讀類似于:
使用單行注釋。塊注釋用于注釋正式文檔和無用代碼。
将var語句放在函數的首部。
最好把每個變量的聲明語句單獨放到一行,并加上注釋說明。所有變量按照字母排序。
JavaScript沒有塊範圍,是以在塊裡面定義變量很容易引起C/C++/Java程式員們的誤解。在函數的首部定義所有的變量。
盡量減少全局變量的使用。不要讓局部變量覆寫全局變量。
所有的函數在使用前進行聲明。 内函數的聲明跟在var語句的後面。這樣可以幫助判斷哪些變量是在函數範圍内的。
函數名與((左括号)之間不應該有空格。)(右括号)與 開始程式體的{(左大括号)之間應插入一個空格。函數程式體應縮進四個空格。}(右大括号)與聲明函數的那一行代碼頭部對齊。
下面這種書寫方式可以在JavaScript中正常使用,因為在JavaScript中,函數和對象的聲明可以放到任何表達式允許的地方。且它讓内聯函數和混合結構具有最好的可讀性。
如果函數是匿名函數,則在function和((左括号)之間應有一個空格。如果省略了空格,否則會讓人感覺函數名叫作 function。
盡量不使用全局函數。
When a function is to be invoked immediately, the entire invocation expression should be wrapped in parens so that it is clear that the value being produced is the result of the function and not the function itself.
變量名應由26個大小寫字母(A..Z,a..z),10個數字(0..9),和_(下劃線)組成。避免使用國際化字元(如中文),因為它們不是在任何地方都可以被友善的閱讀和了解。不要在命名中使用$(美元符号)或者(反斜杠)。
大多數的變量名和方法命應以小寫字母開頭。
全局變量應該全部大寫。(JavaScript沒有宏或者常量,是以不會是以造成誤會)
每一行最多隻包含一條語句。把;(分号)放到每條簡單語句的結尾處。注意一個函數指派或對象指派語句也是指派語句,應該以分号結尾。
JavaScript可以把任何表達式當作一條語句。這很容易隐藏一些錯誤,特别是誤加分号的錯誤。隻有在指派和調用時,表達式才應被當作一條單獨的語句。
複合語句是被包含在{ }(大括号)的語句序列。
被括起的語句必須多縮進四個空格。
{(左大括号)應在複合語句其實行的結尾處。
}(右大括号)應與{(左大括号)的那一行的開頭對齊
大括号應該在所有複合語句中使用,即使隻有一條語句,當它們是控制結構的一部分時, 比如一個if或者for語句。這樣做可以避免以後添加語句時造成的錯誤。
語句标示是可選的,隻有以下語句必須被标示:while, do,for,switch。
一條有傳回值的return語句不要使用( )(括号)來包覆傳回值。如果傳回表達式,則表達式應與return 關鍵字在同一行,以避免誤加分号錯誤。
if語句應如以下格式:
for語句應如以下格式:
第一種形式的循環用于已經知道相關參數的數組循環。
第二種形式應用于對象中。object原型中的成員将會被包含在疊代器中。通過預先定義hasOwnProperty方法來區分真正的object成員是個不錯方法:
while語句應如以下格式:
do語句應如以下格式:
不像别的複合語句,do語句總是以;(分号)結尾。
switch語句應如以下格式:
每個 case與switch對齊。這可避免過分縮進。
每一組statements(除了default應以 break,return,或者throw結尾。不要讓它順次往下執行。
try語句應如以下格式:
避免使用continue語句。它很容易使得程式的邏輯過程晦澀難懂。
用空行來将邏輯相關的代碼塊分割開可以提高程式的可讀性。
空格應在以下情況時使用:
• 跟在((左括号)後面的關鍵字應被一個空格隔開。
• 函數參數與((左括号)之間不應該有空格。這能幫助區分關鍵字和函數調用。
• 所有的二進制操作符,除了.(點) 和((左括号)和 [(左方括号)應用空格将其與操作數隔開。
• 一進制操作符與其操作數之間不應有空格,除非操作符是個單詞,比如typeof。
• 每個在控制部分,比如for 語句中的; (分号)後須跟一個空格。
• 每個,(逗号)後應跟一個空格。
使用{}代替new Object()。使用[]代替new Array()。
當成員名是一組有序的數字時使用數組來儲存資料。當成員名是無規律的字元串或其他時使用對象來儲存資料。
避免使用逗号操作符,除非在特定的for 語句的控制部分。(這不包括那些被用在對象定義,數組定義,var語句,和參數清單中的逗号分隔符。)
在JavaScript中塊沒有域。隻有函數有域。不要使用塊,除非在複合語句中。
避免在if和while語句的條件部分進行指派。
是一條正确語句?或者
才是對的?避免這種不容易判斷對錯的結構。
使用===和!==操作符會相對好點。==和!=操作符會進行類型強制轉換。 特别是, 不要将==用于與錯值比較( false,null,undefined,“”,0,NaN)。
小心在+後緊跟+或++。這種形式很容易仍人迷惑。應插入括号以便于了解。
最好能寫成
這樣+ +不會被誤認為是++。
eval是JavaScript中最容易被濫用的方法。避免使用它。
eval有别名。不要使用Function構造器。不要給setTimeout或者setInterval傳遞字元串參數。
總有一些特别的原因導緻一些非常好的文章的原文位址暫時或永久不能通路,這裡就當是一個快照吧,一切權力和狀态都以原文為準,這裡僅僅作為不時之需。任何問題請聯系kavenyan[at]gmail.com。