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