1、縮進(jìn)
每一行的層級(jí)由
4個(gè)空格組成,避免使用制表符縮進(jìn)
2、行的長(zhǎng)度
每行長(zhǎng)度不超過(guò)
80個(gè)字符,如果超過(guò),應(yīng)當(dāng)在一個(gè)運(yùn)算符(逗號(hào),加號(hào)等)后換行。下一行應(yīng)當(dāng)增加兩級(jí)縮進(jìn)(80個(gè)空格)
3、運(yùn)算符的行間距
二元運(yùn)算符前后必須使用一個(gè)空格來(lái)保持表達(dá)式的簡(jiǎn)潔,操作符包括賦值運(yùn)算符和邏輯運(yùn)算符
1 + 2 = 3
4、括號(hào)間距
當(dāng)使用括號(hào)時(shí),緊接左括號(hào)之后和緊接右括號(hào)之前不應(yīng)該有空格
if (num > 1)
5、對(duì)象直接量
對(duì)象直接量應(yīng)當(dāng)使用如下格式
起始左花括號(hào)應(yīng)當(dāng)同表達(dá)式保持一行
每個(gè)屬性的名值對(duì)應(yīng)當(dāng)保持一個(gè)縮進(jìn),第一個(gè)屬性應(yīng)當(dāng)在左花括號(hào)后另起一行
每個(gè)屬性的名值對(duì)應(yīng)當(dāng)使用不含引號(hào)的屬性名,其后緊跟一個(gè)冒號(hào)(之前不含空格) ,而后是值
倘若屬性值是函數(shù)類(lèi)型,函數(shù)體應(yīng)當(dāng)在屬性名之下另起一行,而且其前后就均保留一個(gè)空格
一組相關(guān)的屬性前后可以插入空行以提升代碼的可讀性結(jié)束的右花括號(hào)應(yīng)當(dāng)獨(dú)占一行
let obj = {
// 插入空行
a: 1,
fun: function () {
}
}
6、注釋
頻繁地使用注釋有助于他人理解你的代碼,如下情況應(yīng)當(dāng)使用注釋
代碼晦澀難懂
可能被誤認(rèn)為錯(cuò)誤的代碼
必要但并不明顯的針對(duì)特定瀏覽器的代碼
對(duì)于對(duì)象、方法或者屬性,生成文檔是有必要的(使用恰當(dāng)?shù)奈臋n注釋)
6.1 單行注釋
單行注釋單行注釋?xiě)?yīng)當(dāng)用來(lái)說(shuō)明一行或者一組相關(guān)的代碼。 單行注釋可能有如下三種使用方式
獨(dú)占一行的注釋?zhuān)脕?lái)解釋下一行代碼
在代碼行的尾部注釋,用來(lái)解釋它之前的代碼
多行,用來(lái)注釋掉一個(gè)代碼塊
對(duì)于行尾的情況,代碼和注釋間至少一個(gè)空格
// 獨(dú)占一行的注釋
let num = 1; // 代碼行的尾部注釋
6.2 多行注釋
多行注釋?xiě)?yīng)當(dāng)在代碼需要更多的文字去解釋的時(shí)候使用。每個(gè)多行注釋?xiě)?yīng)當(dāng)有如下三行
首行僅僅包含
/注釋開(kāi)始,該行不能有其他文件接下來(lái)的行
*開(kāi)頭并保持左對(duì)齊。這些行可以有文字描述最后一行以
*結(jié)束并與先前行對(duì)齊,也不應(yīng)再有其他文字
多行注釋?xiě)?yīng)當(dāng)保持同它描述的代碼一樣的縮進(jìn),后續(xù)每個(gè)
*后加一個(gè)空格
/*
* 這是描述
* 這是描述
* 這是描述
*/
7、變量聲明
所有變量在使用前都應(yīng)當(dāng)事先定義,使用一個(gè)
var
未初始化值得變量在后面
8、函數(shù)聲明
函數(shù)應(yīng)當(dāng)在使用前提前定義,不是作為對(duì)象的方法的函數(shù),應(yīng)當(dāng)使用函數(shù)聲明的格式(
function聲明)
函數(shù)內(nèi)的函數(shù)聲明,應(yīng)當(dāng)在
var聲明后,立即定義
匿名函數(shù)的自執(zhí)行
(function () {} {})
9、命名
變量和函數(shù)命名時(shí)要小心。命名應(yīng)僅限于數(shù)字字母字符。某些情況可以使用下劃線。最好不好用美元符號(hào)
($)和反斜杠(\)
變量命名采用駝峰式,首字母小寫(xiě),每個(gè)單詞首字母大寫(xiě),變量名的第一個(gè)單詞應(yīng)當(dāng)是一個(gè)名詞(而非動(dòng)詞)以避免和函數(shù)混淆,不要再變量名中使用下劃線。
函數(shù)名也使用駝峰,第一個(gè)單詞應(yīng)當(dāng)是動(dòng)詞(而非名詞) ,也不要使用下劃線
構(gòu)造函數(shù)才能首字母大寫(xiě),名稱(chēng)應(yīng)當(dāng)非動(dòng)詞開(kāi)頭
常量(值不會(huì)被改變的變量)命名應(yīng)當(dāng)是全部大寫(xiě),不同單詞用下劃線隔開(kāi)
const NUM = 1;
對(duì)象的屬性同變量的命名規(guī)則相同。對(duì)象的方法同函數(shù)的命名規(guī)則相同,如果屬性或者方法是私有(不希望別人訪司) ,應(yīng)當(dāng)在之前加一個(gè)下劃
10、嚴(yán)格模式
嚴(yán)格模式應(yīng)當(dāng)僅限在函數(shù)內(nèi)部使用,千萬(wàn)不要在全局使用。
11、賦值
當(dāng)給變量賦值時(shí),如果右側(cè)時(shí)含有比較語(yǔ)句的表達(dá)式,需要使用圓括號(hào)包裹
let a = 2;
let b = 2;
let num = (a > b) ? a : b;
12、等號(hào)運(yùn)算符
使用
===(嚴(yán)格等于)和! ==(嚴(yán)格不相等)代替==(相等)和!=(不等)來(lái)避免弱類(lèi)型轉(zhuǎn)換錯(cuò)誤。
13、三元運(yùn)算符
三元運(yùn)算符應(yīng)當(dāng)僅僅用在條件賦值語(yǔ)句中,而不要作為
if的替代品。
let num = (a > b) ? a : b;
14、語(yǔ)句
14.1 簡(jiǎn)單語(yǔ)句
每行最多只包含一條語(yǔ)句。所有簡(jiǎn)單的語(yǔ)句都應(yīng)該以分號(hào)結(jié)束
14.2 返回語(yǔ)句
返回語(yǔ)句當(dāng)返回一個(gè)值的時(shí)候不應(yīng)當(dāng)使用圓括號(hào)包裹,除非在某些情況下這么做可以讓返回值更容易理解,
14.3 復(fù)合語(yǔ)句
復(fù)合語(yǔ)句時(shí)大括號(hào)括起來(lái)得語(yǔ)句列表。
括起來(lái)的語(yǔ)句應(yīng)當(dāng)較符合語(yǔ)句多縮進(jìn)一個(gè)層級(jí)
開(kāi)始的大括號(hào)應(yīng)當(dāng)在符合語(yǔ)句所在行的末尾;結(jié)束的大括號(hào)應(yīng)當(dāng)獨(dú)占一行且同復(fù)合語(yǔ)句的開(kāi)始保持一樣的縮進(jìn)
當(dāng)語(yǔ)句是控制結(jié)構(gòu)的一部分時(shí),諸如
if或者for語(yǔ)句,所有的語(yǔ)句都需要用大括號(hào)括起來(lái),也包括單個(gè)語(yǔ)句。這個(gè)約定是讓我們更加方便地添加語(yǔ)句而不用擔(dān)心忘記加括號(hào)而引起bug像
if一樣的語(yǔ)句的開(kāi)始的關(guān)鍵詞,其后應(yīng)該緊跟一個(gè)空格,起始大括號(hào)應(yīng)當(dāng)在空格之后
14.3.1 if語(yǔ)句
if語(yǔ)句應(yīng)當(dāng)是下面的格式
if (判斷條件) {
// 輸出
} else {
// 輸出
}
14.3.2 for 語(yǔ)句
for語(yǔ)句的初始化部分不應(yīng)當(dāng)有變量聲明
14.3.3 while 語(yǔ)句
14.3.4 switch 語(yǔ)句
如果一個(gè)
switch不包含default的情況,應(yīng)當(dāng)用注釋代替
switch (key) {
case value:
// code
break;
case value:
// code
break;
// 沒(méi)有default
}
15、留白
在邏輯相關(guān)的代碼塊之間添加空行可以提高代碼的可讀性。
兩行空行雙限在如下情況中使用
- 在不同的源代碼文件之間
- 在類(lèi)和接口定義之間
單行空行僅限在如下情況中使用
方法之間
方法中局部變量和第一行語(yǔ)句中間
多行或者單行注釋之前
方法中邏輯代碼塊之間以提升代碼的可讀性
空格應(yīng)當(dāng)在如下情況中使用
- 關(guān)鍵詞后跟括號(hào)的情況應(yīng)當(dāng)用空格隔開(kāi)
- 參數(shù)列表中逗號(hào)之后應(yīng)當(dāng)留一個(gè)空格
- 所有的除了點(diǎn)
(.)之外的二元運(yùn)算符,其操作數(shù)都應(yīng)當(dāng)用空格隔開(kāi)。單目運(yùn)算符的操作數(shù)事件不應(yīng)該用空白隔開(kāi),諸如一元減號(hào),遞增(++),遞減(-))。 -
for語(yǔ)句中的表達(dá)式之間應(yīng)當(dāng)用空格隔開(kāi)
16、需要避免的
- 切勿使用像
String一類(lèi)的原始包裝類(lèi)型創(chuàng)建新的對(duì)象。 - 避免使用
eval() - 避免使用
with語(yǔ)句(其實(shí)該語(yǔ)句已經(jīng)被廢除了,所以老夫就不教你們了)
寫(xiě)在最后:風(fēng)格這種東西,有很多,就拿縮進(jìn)來(lái)說(shuō):
-
jQuery核心風(fēng)格指南明確規(guī)定使用制表符縮進(jìn) -
Daiglas Crockford的JavaScript代碼規(guī)范規(guī)定使用4個(gè)空格字符縮進(jìn) -
SproutCore風(fēng)格指南規(guī)定使用2個(gè)空格縮進(jìn) -
Google的Javascript風(fēng)格指南規(guī)定使用2個(gè)空格縮進(jìn) -
Dojo編程風(fēng)格指南規(guī)定使用制表符縮進(jìn)
所以啊,風(fēng)格很多,大概的了解一下,一切以你所在的團(tuán)隊(duì)風(fēng)格為準(zhǔn)。