原則
- as short as possible(如無必要,勿增註釋):儘量保持代碼本身的清晰性可讀性
- as long as necessary(如有必要,儘量詳細):合理的註釋、空行排版等,可以讓代碼更易閱讀、更具美感。
1. JavaScript命名規範
-
變量
使用駝峯命名方式(Camel)- var userName = {};
-
私有屬性、變量和方法
都以_下劃線命名- var _privateMethod = {};
-
常量
全部使用大寫字母,單詞間下劃線分割的方式命名- var PI_PI = 3.14;
函數名
使用駝峯命名-
函數參數
使用駝峯命名function formateString(oldString) { }
類
使用帕斯卡命名法(Pascal)-
類的屬性和方法
,使用駝峯命名法function OldPerson(oldName, newName){ this.oldName = oldName; this.newName = newName; }
枚舉變量
使用帕斯卡命名法枚舉的屬性
,全部使用大寫字母,單詞間下劃線分割的命名法-
由多個單詞組成的縮寫詞,在命名中,根據當前命名法和出現的位置,所有字母的大小寫與首字母的大小寫保持一致。
function XMLParser() {} function insertHTML(element, html) {} var httpRequest = new HTTPRequest();
命名的詞法
- 類名,使用名詞
- var name = "";
- 函數名,使用動賓結構
- function getName(){}
- boolean類型的變量,使用is或者has開頭。
var isReady = false; var hasApple = true;
- Promise對象用動賓短語的進行時表達
var loadingData = ajax.get('url'); loadingData.then(callback);
接口命名規範
- 可讀性強
- 儘量不與 jQuery 社區已有的習慣衝突
- 儘量寫全。不用縮寫,除非是下面列表中約定的;(變量以表達清楚爲目標,uglify 會完成壓縮體積工作)
- 排版縮進採用統一的縮進方式排版代碼。縮進爲2個空格。
If(condition1 || condition2) {
action1;
} else if (condition3 && condition4) {
action2;
} else if (condition5
&& condition6
&& condition7
&& condition8) {
action2;
} else {
default action;
}
- 關鍵詞、條件括弧後面使用空格;運算操作符號兩側使用空格;語句分割符‘,’後面使用空格;
var name[空格]=[空格]value;
if[空格](a,[空格]b) {
}
- 左大括號"{"可以居行尾,右大括號"}"單獨佔一行,居行首
if (a && b) {
}
- 句末必須使用分好結尾;
var fn = function () {
};//這裏沒有分號的話,腳本解析器會報錯!!!
(function () {
alert(1);
})();
- if、while、for、do語句的執行體總是用"{"和"}"括起來
總是使用 var 來聲明變量。
如不指定 var,變量將被隱式地聲明爲全局變量,這將對變量難以控制。
如果沒有聲明,變量處於什麼定義域就變得不清(可以是在 Document 或 Window 中,也可以很容易地進入本地定義域);
變量聲明可以只用一個 var 關鍵字聲明,多個變量用逗號隔開;
賦值儘量寫在變量聲明當中。
使用 === 精確的比較操作符,避免在判斷的過程中,由 JavaScript 的強制類型轉換所造成的錯誤(比較的雙方必須是同一類型纔會有效);
在用if作判斷的時候,下列表達式統統返回 false:false, 0, undefined, null, NaN, ''(空字符串).
統一使用單引號(‘),不使用雙引號(“)。這在創建 HTML 字符串非常容易辨別;
true和false布爾表達式
- 類型檢測優先使用 typeof
- 對象類型檢測使用 instanceof
- null 和 undefined的檢測使用 == null
運算式 | 返回值 |
---|---|
null | false |
undefined | false |
''(空字符串) | false |
數字0 | false |
"0" | true |
[] | true |
{} | true |
undefined == null | true |
[] == [] | false |
不要在Array上使用for-in循環
for-in 循環只用於object/map/hash循環,
因爲for-in循環不是從0到length-1進行遍歷的,它遍歷的是所有出現在對象和原型鏈上的key
二元和三元操作符
- 操作符始終寫在前一行,避免分號隱式插入產生問題
- 三元操作符用於代替if操作
&&和||
二元操作符是可短路的,只有在必要的時候纔會計算到最後一項。