基本格式
- 使用4個空格字符做爲一個縮進層級,(記得配置編輯器)。
- 不要省略分號。
- 行的長度限定在80個字符。
- 長度超過限制時,選擇在運算符以後換行,下一行須要兩個層級的縮進。例外,變量賦值以及變量聲明時,第二行應當和賦值運算符或第一個變量保持對齊。
- 適當的增長空行:
- 在方法以前。
- 在方法的局部變量和第一條語句之間。
- 在多行或單行註釋以前。
- 在方法內的邏輯片斷之間插入空行,提升可讀性。
- 變量和函數命名,統一使用小駝峯式大小寫,即首字母小寫,後續每一個單詞首字母都大寫。對於構造函數,使用大駝峯式大小寫。匈牙利命名,如sName表示字符串,iCount表示整數,不推薦使用。
- 推薦的命名方式
- 變量的命名應當是名詞。
- 函數和方法的前綴應當是動詞。
- 構造函數的命名應當是名詞。
- 一些常見動詞的約定:
動詞 |
含義 |
can |
函數返回一個布爾值 |
has |
函數返回一個布爾值 |
is |
函數返回一個布爾值 |
get |
函數返回一個非布爾值 |
set |
函數用來保存一個值 |
- 常量,使用大寫字母和下劃線來命名,下劃線用以分隔單詞。
- 引號的使用,字符串,傾向於使用單引號,並始終保持這個風格。
- null 的使用場景爲,指望是對象的變量,參數,返回值,把它看成對象的佔位符。
- 變量在聲明時即賦予初始值。undefined的問題見下:
jsvar b;
console.log(b) // undefined
console.log(typeof b); // 'undefined'
console.log(c) // 報錯
console.log(typeof c) // 'undefined'
var a = {};
console.log(a.aaa) // undefined
console.log(typeof a.aaa); // 'undefined'
console.log(d.aaa) // 報錯
console.log(typeof d.aaa); // 報錯
- 對象和數組使用直接量進行定義。
jsvar obj = {
a: "a"
}
var arr = ["a","b","c"];
註釋
-
單行註釋數組
- 用來解釋下一行代碼。請在這行註釋以前插入一個空行,且縮進層級和下一行代碼保持一致。
- 在代碼行尾部的註釋。代碼結束到註釋之間至少由一個縮進。該行不要超過最大字符限制,若超過請放置於該行上方。
- 註釋大段的代碼。
-
多行註釋瀏覽器
js/*
* 我是註釋
* 另外一段註釋
*/
- 與單行註釋同樣,註釋以前有一個空行。
- 縮進與下一行代碼一致。
-
使用註釋編輯器
- 難以理解的代碼
- 可能被誤覺得錯誤的代碼
- 瀏覽器特性Hack
語句和表達式
-
全部的塊語句都應該使用花括號。函數
- if
- for
- while
- do...while...
- try...catch...finally
花括號的對齊規範code
js// 推薦
if(condition) {
doSomething();
} else {
doSomethingElse();
}
// 禁止,以避免致使錯誤的分號自動插入。
if (condition)
{
doSomething();
}
else
{
doSomethingElse();
}
-
塊語句間隔,推薦使用Google JavaScript風格。對象
jsif(condition){
doSomething();
}
jsif (condition) {
doSomething();
}
jsif ( condition ) {
doSomething();
}
此處省略了switch for的使用規範ip
-
for-in 使用規範原型鏈
- for-in 循環必須使用
hasOwnProperty()
。
- 除非你要查找原型鏈,但必須補充註釋。
- 不可用於遍歷數組,數組必須使用for。
變量、函數和運算符
- js會將變量聲明提早,所以在函數內部任意地方定義變量和在函數頂部定義變量是徹底同樣的。
尤爲是js沒有塊級做用域,需注意。推薦作法是,有意識地將聲明提高到函數塊的頂部來作。
- 函數聲明一樣也會被js提早。推薦作法是,先聲明後使用。
- 不可在條件語句中使用函數聲明。
- 嚴格模式,"use strict"; 不要將該指令寫到全局中,而是寫在函數塊內。
- 始終使用 === 和 !== 。
- 禁止使用 eval() ,惟一例外:涉及到回調中解析JSON的情形。
- 禁止使用原始包裝類型(String,Boolean,Number)