#######################
1.縮進
[強制] 使用 4 個空格做爲一個縮進層級,不允許使用 2 個空格 或 tab 字符。
[強制] switch中縮進2個空格
[強制] 要求分號前面不可以有空格,後面可以有空格
[強制] 要求語句塊之前保留一個空格
[強制] 關鍵字和類似關鍵字前後保留一個空格
[強制] 要求運算符前後保留一個空格
[強制] 要求在一元操作符前後存在空格
[強制] 要求在註釋前有一個空格
[強制] 要求逗號後面有一個空格,前面不允許有空格
[強制] 要求generator函數*前面空一格,後面不空格
[禁止] 不必要的空白
[禁止] 使用 空格 和 tab 混合縮進
[禁止] 出現多個空格
[禁止] 在對象字面量、解構賦值 和 import/export 說明符的花括號中使用空格
[禁止] 函數圓括號之前有一個空格
[禁止] 圓括號內的空格
2.換行
[強制] 要求文件末尾空一行
[強制] 要求聲明變量後要空一行
[強制] 要求塊內開頭末尾空一行
[禁止] 出現多個空行
3.語句
[強制] 要求逗號在行尾出現
[強制] 要求if else while for do後面的代碼塊用{ }包圍
[強制] 要求在每個語句的末尾有分號
[禁止] 空塊語句
[禁止] 使用標籤語句
[禁止] 在嵌套的語句塊中出現function 聲明
[禁止] 在運算關係的左側使用布爾值,例如:if( !key in obj)
[禁止] 在返回語句中賦值
4.命名
[強制] 駝峯命名格式
[強制] 所有的常量都使用大寫
[建議] boolean 類型的變量使用 is 或 has 開頭。
5.註釋
[強制] 文件:創建新的文件時,頁頭註釋完整;包含
/*
* url: 頁面路由
* author:開發人
* date:開發時間
* description:頁面描述
*/
[強制] 註釋與上一行之間必須空一行
[強制] 要求在註釋前有一個空格
[強制] 函數/方法註釋必須包含函數說明,有參數和返回值時必須使用註釋標識
[強制] 對 Object 中各項的描述, 必須使用 @param 標識。
[強制] 類的屬性或方法等成員信息使用 @public / @protected / @private 中的任意一個,指明可訪問性。
[禁止] 註釋和代碼出現在同一行
[建議] 文件註釋中可以用 @author 標識開發者信息。
[建議] 命名空間使用 @namespace 標識。
[建議] 使用 @class 標記類或構造函數。
[建議] 使用 @extends 標記類的繼承信息。
6.變量
[強制] 函數中的變量在一起聲明
[禁止] 會根據不同環境等情況,動態變化的值,禁止寫死
[禁止] 重新聲明原生對象
[禁止] 重新聲明變量
[禁止] 重新定義關鍵字
[禁止] 初始化變量爲undefined
7.條件判斷
[強制] 判斷條件最多有九次
[禁止] 自身比較
[禁止] 在條件語句中出現賦值操作符,例如if(a = b)
[禁止] 在條件中使用常量表達式,例如:if(1)
[禁止] 在 else 前有 return,如果 if 塊中包含了一個 return 語句,else 塊就成了多餘的了。可以將其內容移至塊外。
[禁止] if 語句作爲唯一語句出現在 else 語句塊中
[建議] 對於相同變量或表達式的多值條件,用 switch 代替 if
[建議] 在 Equality Expression 中使用類型嚴格的 ===。僅當判斷 null 或 undefined 時,允許使用 == null
8.循環
[禁止] 循環中存在函數
[建議] 對循環內多次使用的不變值,在循環外用變量緩存。
9.類型
[強制] 要求調用 isNaN()檢查 NaN
[強制] typeof 表達式與有效的字符串進行比較
[建議] 類型檢測優先使用 typeof。對象類型檢測使用 instanceof。null 或 undefined 的檢測使用 == null。
[建議] 轉換成 string 時,使用 + ''
[建議] 轉換成 number 時,通常使用 +
[建議] string 轉換成 number,要轉換的字符串結尾包含非數字並期望忽略時,使用 parseInt。
10.字符串
[強制] 字符串開頭和結束使用單引號 '
[強制] 當使用 _dirname 和 _filename 時不允許字符串拼接,windows和unix路徑分隔符不同,爲了避免混淆並且創建正確的路徑
[建議] 複雜的數據到視圖字符串的轉換過程,選用一種模板引擎
[建議] 使用``進行字符串拼接,儘量使用es6中的模板字符串對字符串進行拼接,避免使用加號+和join方法
11.對象
[強制] 定義getter,如果對象的setter存取器存在
[強制] 對象鍵值末尾不能帶逗號
[強制] 以方括號取對象屬性時,[之後和]之前不能帶空格
[強制] object.key中'.'號應與屬性在同一行
[強制] 對象字面量的key和冒號之間不允許有空格,冒號和value之間必須有空格
[強制] 使用對象字面量 {} 創建新 Object
[禁止] 對象字面量中出現重複的 key
[禁止] 擴展原生對象
[建議] 屬性訪問時,儘量使用
12.數組
[強制] '['之後和']'之前不能帶空格
[強制] 使用數組字面量 [] 創建新數組,除非想要創建的是指定長度的數組
[禁止] 稀疏數組,例如: arr = [1, 2, ,, 4]
13.函數
[強制] 如果函數包含err或者error作爲參數,但是在函數內沒有做錯誤的處理則會報錯
[強制] 調用函數時括號前面不能有空格,也不能換行,只能 fun()
[禁止] 使用 arguments.caller 和 arguments.callee,因爲他們已經在es5中被棄用
[禁止] 在 function 定義中出現重複的參數
[禁止] 使用未聲明的變量
[禁止] 存在未使用過的變量
[禁止] 存在未使用過的表達式
[禁止] 在return、throw、continue 和 break 語句之後出現不可達代碼
[禁止] 使用Function構造函數,例如: var person = new function () {}
[禁止] 對函數參數再賦值
[建議] 一個函數的長度控制在 50 行以內
[建議] 一個函數的參數控制在 6 個以內
[建議] 通過 options 參數傳遞非數據輸入型參數
14.其它最佳實踐
[強制] 實例化構造函數時首字母必須大寫
[強制] 要求調用首字母大寫的函數時有 new 操作符
[強制] 實例化時必須要帶括號
[強制] 操作符使用一致的換行符風格,例如:foo = 1
+ 2
[強制] 限制可以被拋出的異常
[禁止] 在塊級作用域外訪問塊內定義的變量
[禁止] 存在alert、console、debugger
[禁止] 在正則表達式中使用控制字符
[禁止] 刪除變量,例如 delete x
[禁止] 使用eval()
[禁止] 冗餘的括號
[禁止] 不必要的分號
[禁止] case 語句落空
[禁止] 隱式的eval()
[禁止] 不規則的空白
[禁止] 出現多個空格
[禁止] 使用new產生副作用,例如:只new Person()但卻不使用
[禁止] 對 String,Number 和 Boolean 使用 new 操作符
[禁止] 將全局對象當作函數進行調用,例如:var math = Math()
[禁止] 正則表達式字面量中出現多個空格
[禁止] 可以在有更簡單的可替代的表達式時使用三元操作符
###############################