JavaScript 代碼規(guī)范
JavaScript文件
JavaScript程序應(yīng)獨(dú)立保存在后綴名為.js的文件中。
JavaScript代碼不應(yīng)該被包含在HTML文件中,除非這是段特定只屬于此部分的代碼。在HTML中的JavaScript代碼會明顯增加文件大小,而且也不能對其進(jìn)行緩存和壓縮。
縮進(jìn)
縮進(jìn)的單位為四個空格。避免使用Tab鍵來縮進(jìn)(即使現(xiàn)在已經(jīng)是21世紀(jì)了),也始終沒有個統(tǒng)一的Tab長短標(biāo)準(zhǔn)。雖然使用空格會增加文件的大小,但在局域網(wǎng)中幾乎可以忽略,且在最小化過程中也可被消除掉。
每行長度
避免每行超過80個字符。當(dāng)一條語句一行寫不下時,請考慮折行。在運(yùn)算符號,最好是逗號后換行。在運(yùn)算符后換行可以減少因?yàn)閺?fù)制粘貼產(chǎn)生的錯誤被分號掩蓋的幾率。下一行應(yīng)該縮進(jìn)8個空格。
注釋
不要吝嗇注釋。給以后需要理解你的代碼的人們(或許就是你自己)留下信息是非常有用的。注釋應(yīng)該和它們所注釋的代碼一樣是書寫良好且清晰明了。偶爾的小幽默就更不錯了。記得要避免冗長或者情緒化。
及時地更新注釋也很重要。錯誤的注釋會讓程序更加難以閱讀和理解。
變量聲明
所有的變量必須在使用前進(jìn)行聲明。JavaScript并不強(qiáng)制必須這么做,但是這么做可以讓程序易于閱讀,且也容易發(fā)現(xiàn)那些沒聲明的變量(它們會被編譯成全局變量)。
將var語句放在函數(shù)的首部。
最好把每個變量的聲明語句單獨(dú)放到一行,并加上注釋說明。所有變量按照字母排序。
var currentEntry; // 當(dāng)前選擇項(xiàng)
var level; ? ? ? ?// 縮進(jìn)程度
var size; ? ? ? ? // 表格大小
函數(shù)聲明
所有的函數(shù)在使用前進(jìn)行聲明。 內(nèi)函數(shù)的聲明跟在var語句的后面。這樣可以幫助判斷哪些變量是在函數(shù)范圍內(nèi)的。
函數(shù)名與((左括號)之間不應(yīng)該有空格。)(右括號)與 開始程序體的{(左大括號)之間應(yīng)插入一個空格。函數(shù)程序體應(yīng)縮進(jìn)四個空格。}(右大括號)與聲明函數(shù)的那一行代碼頭部對齊。
function outer(c, d) { ? ? ? ?
? ? ?var e = c * d; ? ? ? ?
? ? function inner(a, b) { ? ? ? ? ? ?
? ? ? ? ? return (e * a) + b; ? ? ? ?
? ? } ? ? ? ?
? ? return inner(0, 1); ??
}
命名
變量名應(yīng)由26個大小寫字母(A..Z,a..z),10個數(shù)字(0..9),和_(下劃線)組成。避免使用國際化字符(如中文),因?yàn)樗鼈儾皇窃谌魏蔚胤蕉伎梢员环奖愕拈喿x和理解。不要在命名中使用$(美元符號)或者(反斜杠)。
不要把_(下劃線)作為變量名的第一個字符。它有時用來表示私有變量,但實(shí)際上JavaScript并沒提供私有變量的功能。如果私有變量很重要, 那么使用私有成員的形式。應(yīng)避免使用這種容易讓人誤解的命名習(xí)慣。
大多數(shù)的變量名和方法命應(yīng)以小寫字母開頭。
必須與new共同使用的構(gòu)造函數(shù)名應(yīng)以大寫字母開頭。當(dāng)new被省略時JavaScript不會有任何編譯錯誤或運(yùn)行錯誤拋出。忘記加new時會讓不好的事情發(fā)生(比如被當(dāng)成一般的函數(shù)),所以大寫構(gòu)造函數(shù)名是我們來盡量避免這種情況發(fā)生的唯一辦法。
全局變量應(yīng)該全部大寫。(JavaScript沒有宏或者常量,所以不會因此造成誤會)
語句
簡單語句
每一行最多只包含一條語句。把;(分號)放到每條簡單語句的結(jié)尾處。注意一個函數(shù)賦值或?qū)ο筚x值語句也是賦值語句,應(yīng)該以分號結(jié)尾。
JavaScript可以把任何表達(dá)式當(dāng)作一條語句。這很容易隱藏一些錯誤,特別是誤加分號的錯誤。只有在賦值和調(diào)用時,表達(dá)式才應(yīng)被當(dāng)作一條單獨(dú)的語句。
復(fù)合語句
復(fù)合語句是被包含在{ }(大括號)的語句序列。
被括起的語句必須多縮進(jìn)四個空格。{(左大括號)應(yīng)在復(fù)合語句其實(shí)行的結(jié)尾處。}(右大括號)應(yīng)與{(左大括號)的那一行的開頭對齊大括號應(yīng)該在所有復(fù)合語句中使用,即使只有一條語句,當(dāng)它們是控制結(jié)構(gòu)的一部分時, 比如一個if或者for語句。這樣做可以避免以后添加語句時造成的錯誤。
標(biāo)示
語句標(biāo)示是可選的,只有以下語句必須被標(biāo)示:while, do,for,switch。
return 語句
一條有返回值的return語句不要使用( )(括號)來括住返回值。如果返回表達(dá)式,則表達(dá)式應(yīng)與return 關(guān)鍵字在同一行,以避免誤加分號錯誤。
continue 語句
避免使用continue語句。它很容易使得程序的邏輯過程晦澀難懂。
with 語句
不要使用with語句。
空白
用空行來將邏輯相關(guān)的代碼塊分割開可以提高程序的可讀性。
空格應(yīng)在以下情況時使用:
? 跟在((左括號)后面的關(guān)鍵字應(yīng)被一個空格隔開。 while (true) {
? 函數(shù)參數(shù)與((左括號)之間不應(yīng)該有空格。這能幫助區(qū)分關(guān)鍵字和函數(shù)調(diào)用。
? 所有的二元操作符,除了.(點(diǎn)) 和((左括號)和 [(左方括號)應(yīng)用空格將其與操作數(shù)隔開。
? 一元操作符與其操作數(shù)之間不應(yīng)有空格,除非操作符是個單詞,比如typeof。
? 每個在控制部分,比如for 語句中的; (分號)后須跟一個空格。
? 每個,(逗號)后應(yīng)跟一個空格。
對象規(guī)則
對象定義的規(guī)則:
將左花括號與類名放在同一行。
冒號與屬性值間有個空格。
字符串使用雙引號,數(shù)字不需要。
最后一個屬性-值對后面不要添加逗號。
將右花括號獨(dú)立放在一行,并以符號作為結(jié)束符號。
文件擴(kuò)展名
HTML 文件后綴可以是?.html?(或r?.htm)。
CSS 文件后綴是?.css?。
JavaScript 文件后綴是?.js?。
使用小寫文件名
大多 Web 服務(wù)器 (Apache, Unix) 對大小寫敏感: london.jpg 不能通過 London.jpg 訪問。
其他 Web 服務(wù)器 (Microsoft, IIS) 對大小寫不敏感: london.jpg 可以通過 London.jpg 或 london.jpg 訪問。
你必須保持統(tǒng)一的風(fēng)格,我們建議統(tǒng)一使用小寫的文件名。