Web前端程式碼規範
Web技術中心程式碼規範
前言
軟體的長期價值直接源於其編碼質量。在它的整個生命週期裡,一個程式可能會被許多人閱讀或修改。如果一個程式可以清晰的展現出它的結構和特徵,那就能減少在以後對其進行修改時出錯的可能性,程式設計規範可以幫助程式設計師們增加程式的健壯性。基本所有的前端程式碼都是暴露給公眾的,所以我們更應該保證其質量。
規範理念
Any violation to this guide is allowed if it enhances readability.
所有的程式碼都要變成可供他人容易閱讀的。
--引用自Dojo Javascript 語法規範
規範詳解
JS命名規範
- 必須使用 Tab 鍵進行程式碼縮排,以節約程式碼大小,建議設定編輯器的tab為4個空格的寬度(而不是4個空格)
- 介面風格
結構 |
規則 |
例如 |
類 |
駝峰式 |
ModuleClass() |
公有方法 |
混合式 |
getPosition() |
公有變數 |
混合式 |
frameStyle |
常量 |
大寫式 |
DEFAULT_FRAME_LAYOUT |
- 其他建議風格,非必要
結構 |
規則 |
公有方法和屬性 |
混合,例子:mixedCase |
私有方法和屬性 |
混合,例子:_mixedCase |
方法(method)引數 |
混合,例子:mixedCase |
本地(local)變數 |
混合,例子:mixedCase |
- 所有語句結束後,必須使用 ; 號結束
- 所有變數必須是有意義的英文,嚴厲禁止拼音
- 變數允許使用公認英文縮寫
- 類命名必須是駝峰式
- 常量必須所有單詞大寫,並且每個單詞間加下劃線
- 列舉型別時,列舉的命名必須有意義,列舉與列舉成員必須以駝峰式
- 常量和列舉必須在最前端定義,merge 時注意,必須把常量與列舉定義的檔案放在檔案列表的第一位
- 變數內的簡寫單詞如果在開頭則全小寫:xmlDocument,如果不在開頭則全大寫:loadXML!!!
- "on"只能用作事件的命名
- 函式開頭必須是有意義的動詞或動詞短語
- 私有類的變數屬性成員 建議 使用混合式命名,並前面下下劃線
- 臨時的全域性變數放到一個全域性的雜湊表裡,方便變量回收
- 所有全域性變數必須初始化,儘量少用全域性變數
- 大括號前面不能有換行符
- 保留字以及特有的dom屬性不能作為變數名
特殊命名約定
- 前面加 “is” 的變數名應該為布林值,亦可使用 “can” “has” “should”
- 前面加 ”str” 的變數名應該為字串
- 前面加 “arr” 的變數名應該為陣列
- 前面加 “num” 或 “count” 的變數名應該為數字
- “o” 作為區域性變數或引數,表示為Object
- “e” 作為區域性變數或引數,表示為Element
- “evt” 作為區域性變數或引數,表示為event
- “err” 作為區域性變數或引數,表示為error
- 重複變數建議使用 "i", "j", "k" (依次類推)等名稱的變數(全世界公認)
- 能縮寫的單詞儘量縮寫
- 避免產生令人誤解的布林值 isNotNumber isNan
- 處理錯誤的變數,必須在後面跟著 “Error”
- 初始化用的函式 必須使用 “init” 開頭,如果一個頁面只有初始化可以單獨使用 init()
- 儘量做有意義的程式碼折行,不要讓一行程式碼過長。(HTML 字串除外)
- 操作符 建議 使用空格隔開
- 函式呼叫和方法 避免 使用空白
- 逗號(,) 建議 使用空白隔開。
- 不允許頻繁使用 previousSibling 和 nextSibling
詞法結構
- 普通程式碼段應該看起來如下:
while(!isDone){ doSomething(); isDone = moreToDo(); }
- 變數定義方法如下:
var a = null, b = 1, c = 0;
- 函式定義方法如下:
var funcA = function(){ var a = 0; ... }
- if 語句應該看起來像這樣:
if(someCondition){ statements; }else if(someOtherCondition){ statements; }else{ statements; }
- for 語句應該看起來像這樣:
for(initialization; condition; update){ statements; }
- while 語句應該看起來像這樣:
while(!isDone){ doSomething(); isDone = moreToDo(); }
- do ... while 語句應該看起來像這樣:
do{ statements; }while(condition);
- switch 語句應該看起來像這樣:
switch(condition){ case "A": statements; //註釋 case "B": statements; break; default: statements; break; }
- try ... catch 語句應該看起來像這樣:
try{ statements; }catch(ex){ statements; }finally{ statements; }
- 單行的 if - else,while 或者 for 語句也必須加入括號:
if(condition){ statement; }while(condition){ statement; }for(intialization; condition; update){ statement; }
註釋規範(暫不實施,可略過)
- 一些你不打算給其他人使用的函式,建議新增 @ignore 讓文件輸出時可以忽略這段註釋
- 一些相關的功能相關的函式,建議加上@see Function 來對上下文做索引
- 對於一些函式不建議或則需要注意的使用方法,必須加上 @deprecated作為提醒
- 每個js檔案的檔案頭都必須包含 @fileoverview @author, 建議加上@version
- 每個函式都必須使用JsDoc 來註釋他的用意
- 每個帶引數的函式必須包含 @param
- 每個有返回值的函式必須包含 @return
- 建構函式必須加上 @constructor
- 繼承函式建議加上 @base 表示其繼承於哪個類
- 常用全域性變數建議使用 JsDoc 的註釋方式
- 一般的變數及區域性變數才用 // 方式進行註釋,建議在需要做註釋的語句的上一行
- 其他詳情請參考 JsDoc 註釋方法
其他
- String 優化
迴圈體內的字串累加使用join方式。 例如:
var r= [];for (var i=0;i<100;i++){ r.push("hello");}var k= r.join("");
- Switch 建議採用hash-table
switch 可以才用 Object代替 例如:
var a= { "1":doAction1, "2":doAction2,}function doAction1(){}function doAction2(){}a[1]();
- 不建議使用eval
不推薦使用eval來執行指令碼。除非用來解釋已經確定安全的json資料。
- 不要使用Function構造器。
- 不要給setTimeout或者setInterval傳遞字串引數。
- 注意 IE 的記憶體洩露問題
- JavaScript程式碼獨立
Javascript不應該被包含在HTML檔案中,除非這是段特定只屬於此部分的程式碼。在HTML中的JavaScript程式碼會明顯增加檔案大小,而且也不能對其進行快取和壓縮。
CSS命名規範
- id和class命名採用該版塊的英文單詞或組合命名,並第一個單詞小寫,第二個單詞首個字母大寫,如:newRelease(最新產品/new+Release)
- CSS樣式表各區塊用註釋說明
- 儘量使用英文命名原則
- 不用加中槓
- 儘量不縮寫,除非一看就明白的單詞
經過組員激烈的討論後,大家都比較偏向的命名方法如下:
ID:統一採用駝峰式 : 單字之間不以空格斷開(例:camel case)或連線號(-,例:camel-case)、底線(_,例:camel_case)連結,
Class 命名法:駝峰式或下劃線
常見的CSS命名規則如下:
主要的 mian.css
模組 module.css
基本共用 base.css
佈局,版面 layout.css
主題 themes.css
專欄 columns.css
文字 font.css
表單 forms.css
補丁 mend.css
列印 print.css
頭:header
內容:content/container
尾:footer
導航:nav
側欄:sidebar
欄目:column
頁面外圍控制整體佈局寬度:wrapper
左右中:left right center
登入條:loginbar
標誌:logo
廣告:banner
頁面主體:main
熱點:hot
新聞:news
下載:download
子導航:subnav
選單:menu
子選單:submenu
搜尋:search
友情連結:friendlink
頁尾:footer
版權:copyright
滾動:scroll
內容:content
標籤頁:tab
文章列表:list
提示資訊:msg
小技巧:tips
欄目標題:title
加入:joinus
指南:guild
服務:service
註冊:regsiter
狀態:status
投票:vote
合作伙伴:partner
(二)註釋的寫法:
/* Footer */
內容區
/* End Footer */
(三)id的命名:
(1)頁面結構
容器: container
頁頭:header
內容:content/container
頁面主體:main
頁尾:footer
導航:nav
側欄:sidebar
欄目:column
頁面外圍控制整體佈局寬度:wrapper
左右中:left right center
(2)導航
導航:nav
主導航:mainbav
子導航:subnav
頂導航:topnav
邊導航:sidebar
左導航:leftsidebar
右導航:rightsidebar
選單:menu
子選單:submenu
標題: title
摘要: summary
(3)功能
標誌:logo
廣告:banner
登陸:login
登入條:loginbar
註冊:regsiter
搜尋:search
功能區:shop
標題:title
加入:joinus
狀態:status
按鈕:btn
滾動:scroll
標籤頁:tab
文章列表:list
提示資訊:msg
當前的: current
小技巧:tips
圖示: icon
註釋:note
指南:guide
服務:service
熱點:hot
新聞:news
下載:download
投票:vote
合作伙伴:partner
友情連結:link
版權:copyright
(四)class的命名:
(1)顏色:使用顏色的名稱或者16進位制程式碼,如
.red { color: red; }
.f60 { color: #f60; }
.ff8600 { color: #ff8600; }
(2)字型大小,直接使用”font+字型大小”作為名稱,如
.font12px { font-size: 12px; }
.font9pt {font-size: 9pt; }
(3)對齊樣式,使用對齊目標的英文名稱,如
.left { float:left; }
.bottom { float:bottom; }
(4)標題欄樣式,使用”類別+功能”的方式命名,如
.barnews { }
.barproduct { }