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