js開發規範

#######################

 

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()

[禁止] 正則表達式字面量中出現多個空格

[禁止] 可以在有更簡單的可替代的表達式時使用三元操作符

 

 

 

 

 

 

 

 

 

 

 

 

 

###############################

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章