編程規(guī)范又叫代碼規(guī)范,為了便于自己和他人閱讀和理解源程序,而制定的編程時(shí)必須遵守的約定,javascript 項(xiàng)目有自己的代碼約定。
1. javascript 代碼約定
代碼約定(coding conventions)指的是編程的樣式指導(dǎo)方針。這些原則大體上包括:
- 變量和函數(shù)的命名和聲明規(guī)則
- 使用空格、縮進(jìn)和注釋的規(guī)則
- 編程習(xí)慣和準(zhǔn)則
代碼約定確保質(zhì)量:
- 改善代碼可讀性
- 提升代碼可維護(hù)性
代碼約定可以是團(tuán)隊(duì)遵守的成文規(guī)則,也可以是您個(gè)人的編碼習(xí)慣。
本頁(yè)介紹 yapf 使用的通用 javascript 代碼約定。
您應(yīng)該繼續(xù)閱讀下一章“最佳實(shí)踐”,學(xué)習(xí)如何避免編碼陷阱。
2. 變量名
在 yapf,我們對(duì)標(biāo)識(shí)符名稱(變量和函數(shù))使用了駝峰式大小寫。
所有名稱以字母開(kāi)頭。
在本頁(yè)的底部,我們會(huì)更廣泛地討論命名規(guī)則。
firstname = "bill"; lastname = "gates"; price = 19.90; tax = 0.20; fullprice = price + (price * tax);
3. 運(yùn)算符周圍的空格
請(qǐng)始終在運(yùn)算符( = + - * / )周圍以及逗號(hào)之后添加空格:
范例
var x = y + z; var values = ["volvo", "saab", "fiat"];
4. 代碼縮進(jìn)
請(qǐng)始終使用對(duì)代碼塊縮進(jìn)使用 4 個(gè)空格:
函數(shù)
function tocelsius(fahrenheit) { return (5 / 9) * (fahrenheit - 32); }
請(qǐng)不要對(duì)縮進(jìn)使用制表符。不同的編輯器對(duì) tab 的解釋也不盡相同。
5. 語(yǔ)句規(guī)則
簡(jiǎn)單語(yǔ)句的通用規(guī)則:
請(qǐng)始終以分號(hào)結(jié)束單條語(yǔ)句:
范例
var values = ["volvo", "saab", "fiat"]; var person = { firstname: "bill", lastname: "gates", age: 50, eyecolor: "blue" };
針對(duì)復(fù)雜語(yǔ)句(compound)的通用規(guī)則:
- 請(qǐng)?jiān)诘谝恍械慕Y(jié)尾處寫開(kāi)括號(hào)
- 請(qǐng)?jiān)陂_(kāi)括號(hào)前使用一個(gè)空格
- 請(qǐng)?jiān)谛滦猩蠈戦]括號(hào),不帶前導(dǎo)空格
- 請(qǐng)不要以分號(hào)來(lái)結(jié)束復(fù)雜語(yǔ)句
函數(shù):
function tocelsius(fahrenheit) { return (5 / 9) * (fahrenheit - 32); }
循環(huán):
for (i = 0; i < 5; i++) { x += i; }
條件:
if (time < 20) { greeting = "good day"; } else { greeting = "good evening"; }
6. 對(duì)象規(guī)則
針對(duì)對(duì)象定義的通用規(guī)則:
- 把開(kāi)括號(hào)與對(duì)象名放在同一行
- 在每個(gè)屬性與其值之間使用冒號(hào)加一個(gè)空格
- 不要在最后一個(gè)屬性值對(duì)后面寫逗號(hào)
- 請(qǐng)?jiān)谛滦猩蠈戦]括號(hào),不帶前導(dǎo)空格
- 請(qǐng)始終以分號(hào)結(jié)束對(duì)象定義
范例
var person = { firstname: "bill", lastname: "gates", age: 50, eyecolor: "blue" };
可以對(duì)短對(duì)象在一行中進(jìn)行壓縮,只在屬性之間使用空格,就像這樣:
var person = {firstname:"bill", lastname:"gates", age:50, eyecolor:"blue"};
7. 行長(zhǎng)度小于 80
為了提高可讀性,請(qǐng)避免每行的長(zhǎng)度超過(guò) 80 個(gè)字符。
如果 javascript 語(yǔ)句超過(guò)一行的長(zhǎng)度,換行的最佳位置是運(yùn)算符或逗號(hào)之后。
范例
document.getelementbyid("demo").innerhtml = "hello kitty.";
8. 命名約定
請(qǐng)始終對(duì)您所有的代碼使用相同的命名約定。例如:
- 變量和函數(shù)名以駝峰大小寫來(lái)寫
- 全局變量使用大寫(我們不這樣做,但是相當(dāng)普遍)
- 常量(比如 pi)使用大寫
我們是否應(yīng)在變量名中使用連字符、駝峰大小寫或下劃線嗎?
這是程序員們經(jīng)常討論的問(wèn)題。答案取決于這個(gè)問(wèn)題是誰(shuí)回答的:
html 和 css 中的連字符:
html5 屬性能夠以 data- 開(kāi)頭(data-quantity, data-price)。
css 在 property-names 中使用連字符(font-size)。
hyphens 可被錯(cuò)誤地視為減法運(yùn)算符。javascript 命名不允許使用連字符。
下劃線:
許多程序員喜歡使用下劃線(date_of_birth),特別是在 sql 數(shù)據(jù)庫(kù)中。
下劃線經(jīng)常被用在 php 參考資料中。
帕斯卡命名法(pascalcase):
c 語(yǔ)言程序員經(jīng)常使用帕斯卡命名法。
駝峰大小寫(camelcase):
javascript 本身、jquery 以及其他 javascript 庫(kù)使用駝峰大小寫。
javascript 命名請(qǐng)不要以 $ 符號(hào)開(kāi)頭。此舉會(huì)引起 javascript 庫(kù)名稱沖突。
9. 在 html 中加載 javascript
使用簡(jiǎn)單的語(yǔ)法來(lái)加載外部腳本(type 屬性不是必需的):
10. 訪問(wèn) html 元素
使用“不整潔的” html 樣式的后果,也許是導(dǎo)致 javascript 錯(cuò)誤。
這兩條 javascript 語(yǔ)句會(huì)產(chǎn)生不同的結(jié)果:
var obj = getelementbyid("demo") var obj = getelementbyid("demo")
如果可能,請(qǐng)?jiān)?html 中使用相同的命名約定(就像 javascript 那樣)。
11. 文件擴(kuò)展名
html 文件應(yīng)該使用 .html 擴(kuò)展名(而非 .htm)。
css 文件應(yīng)該使用 .css 擴(kuò)展名。
javascript 文件應(yīng)該使用 .js 擴(kuò)展名。
12. 使用小寫文件名
大多數(shù) web 服務(wù)器(apache、unix)對(duì)文件名的大小寫敏感:
london.jpg 無(wú)法視作 london.jpg 進(jìn)行訪問(wèn)。
其他 web 服務(wù)器(微軟的 iis)對(duì)大小寫不敏感:
london.jpg 能夠以 london.jpg 或 london.jpg 來(lái)訪問(wèn)。
如果您混合使用大小寫,則必須嚴(yán)格保持連續(xù)和一致。
如果您將站點(diǎn)從大小寫不敏感的服務(wù)器轉(zhuǎn)移至對(duì)大小寫敏感的服務(wù)器,即使這種小錯(cuò)誤也可能破壞您的網(wǎng)站。
為了避免這些問(wèn)題,請(qǐng)始終使用小寫文件名(如果可能)。
13. 性能
計(jì)算機(jī)不會(huì)使用代碼約定。大部分規(guī)則對(duì)程序的執(zhí)行影響很小。
縮進(jìn)和額外的空格對(duì)小段腳本并不重要。
對(duì)于開(kāi)發(fā)中的腳本,應(yīng)該優(yōu)先考慮可讀性。應(yīng)該縮小更大型的生產(chǎn)腳本。