# Javascript編碼規范
## 命名規范
#### 通用命名規則
* 所有變量必須是有意義的英文,嚴厲禁止拼音;
* 變量命名采用小駝峰法(第一個單詞首字母小寫,其余單詞首字母大寫);
* 變量允許使用公認英文縮寫,例如`nav`;
* 常量必須所有單詞大寫,并且每個單詞間加下劃線;
* 類命名必須是大駝峰法(所有單詞第一個字母均大寫);
* 私有類的變量屬性成員, 建議使用混合式命名,并前面下下劃線;
* "on"只能用作事件的命名;
* 所有全局變量必須初始化;
* 保留字以及特有的dom屬性不能作為變量名。
#### 變量命名規范
類型前綴 + 有意義的單詞
* 字符串:sXXX,如:sName,sHtml;
* 數字:nXXX,如:nPage,nTotal;
* 邏輯:bXXX,如:bChecked,bHasLogin;
* 數組:aXXX,如:aList,aGroup;
* 正則:rXXX,如:rDomain,rEmail;
* 函數:fXXX,如:fGetList;
* DOM節點:dXX,如:dDiv,dSpan;
* 其他類型:oXXX,如:oButton,oDate;
* 特殊簡寫:小范圍作用域臨時變量,如函數內部的局部變量或參數:o(Object)、e(Element)、evt(event)、err(errot)等;
* 循環變量:i、j、k以此類推;
#### 函數命名規范
* 普通函數:動詞+名詞,如:fGetList、fGetVersion;
* 涉及邏輯返回值的函數:is、has、can,如:fisAdmin、fhasChild;
* 內部函數:_f+上面規則,如:fLoopCount;
## 書寫規范
#### 對齊和縮進
* 必須使用 Tab 鍵進行代碼縮進,以節約代碼大小,建議設置編輯器的tab為4個空格的寬度(而不是4個空格);
* 所有語句結束后,必須使用 ; 號結束;
* 大括號前面不能換行;
* 操作符必須使用空格隔開;
#### 語法結構
普通代碼段應該如下:
while(!isDone) {
doSomething();
isDone = moreToDo();
}
變量定義方法如下:
var a = null;
var b = 1;
var 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; //注釋
break;
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;
}
## Javascript編寫風格
#### 對象定義規范
在Javascript中,所有類型都是對象,包括string類型。函數的定義,統一使用以下方式:
var a = function() {...};
最后要加上 “;”號,不要再使用以下方式:
function a() {}
對象定義規范:
* string類型定義:`var str = 'xxxxxx';`
* function類型定義:`var func = function() {...};`
* array類型定義:`var arr = new Array();`
* object類型定義:`var obj = {'name': 'xxxxxx', 'age': '10'}`
#### 事件監聽
開發中統一使用module.js對對象事件(DOM節點)進行監聽。
__塊狀節點:__model-node,包括的標簽:div、ul、li、dl、form等,例如:
<div model-node="testmodel" model-args="name=testname&value=testvalue"></div>
__獨立事件節點:__event-node,包括的標簽:a、span、label、strong、input、select、button、img、textarea、h1、h2、h3、h4、i等,例如:
<a href="javascript:void(0);" event-node="testevent" event-args="name=testname&value=testvalue"></a>
__事件監聽方法:__load、click、mouseenter、mouseleave