一、命名
1、應給變數和函數取一個含義確切的名稱,不要隨意命名。
2、非建構函式採用駝峰命名法,盡量採用動賓結構,以與變數名相區別,如getName或IsFull。建構函式(即自訂類型)名稱首字母大寫,以與非建構函式相區別,如Person。
3、變數採用駝峰命名法。由於JavaScript是一種弱類型語言,因此建議在變數名稱前加首碼:整形(i),浮點數(f),布爾型(b),字串(s),數組(a)。但不強制這麼做,可根據個人愛好選擇,選擇好後就不要混用加首碼和不加首碼這兩種方式了。
二、布局
1、空格。
a)var與變數名之間留一個空格,變數名與等號之間留一個空格,等號與初始值之間留一個空格,初始值與分號之間不留空格。如:var i = 10;
b)使用字面量方式聲明參考型別變數時,各個屬性與冒號之間不留空格,冒號與初始值之間留一個空格。如: 複製代碼 代碼如下:var Person = {
age: 16,
name: "Sam"
};
c)function與函數名之間留一個空格,函數名與()之間不留空格,()與{之間留一個空格。
d)函數的各個參數之間留一個空格。
e)if、while、for與左括弧之間留一個空格,以強調關鍵字;switch、with與左括弧之間不留空格。
f) 二元操作符與左右兩個運算元之間留一個空格。當某行代碼較長時,也可不留空格。
2、換行。
a)每行語句佔用一行,不要多個語句一行。
b)if、while、for等塊級範圍後的大括弧{不要另起一行,就放在關鍵字同一行。
3、縮排。
a)縮排使用4個空格,不要使用tab。
b)範圍不一樣時就應當進行縮排,以顯示出其層次關係。
三、注釋
1、合理添加註釋。注釋不能完全沒有,也不是越多越好。給重要的方法、變數和演算法(或其他需要注意的問題)添加註釋即可。
2、修改原始碼時,需要同步修改注釋,保持兩者的一致。
3、不要在代碼中使用html方式的注釋。
四、規範
1、申明變數時必須加var關鍵字。雖然JavaScript允許不加var關鍵字,此時成為全域變數,但這是導致問題的一個來源。
2、申明變數時必須同時進行初始化,之後最好不要再改變變數的資料類型了。
3、語句末尾可以加分號的,必須加分號。
4、if、while、for等僅有一條語句時,也需要放在大括弧內。
5、不要隨意使用全域變數,如果不得不使用,最好只用一個全域變數。
6、JavaScript與html、css之間應保持鬆散耦合。html是資料層,css是表現層,JavaScript是行為層,三者應避免緊密的耦合,否則會導致後期難以維護。html中不要有具體的JavaScript代碼,全部採用包含外部檔案的方式;JavaScript中也盡量不要使用innerHTML等插入大量html元素,應考慮將元素放在html中,只不過初始隱藏即可;JavaScript中不要直接修改css中的具體屬性,而應通過className來間接修改。
7、不要修改不是由你所有的對象,不給其執行個體或原型添加屬性或方法,也不要重複定義其已有的方法。否則,當該對象的新版本添加了同名的屬性或方法時,會導致潛在的難以察覺的問題。解決方案有兩種:一是繼承,二是包含。
8、使用命名空間來防止多個庫之間的衝突,可參考YUI庫的組織方式。
9、對於代碼中出現的字面量,應將其放在某個變數的屬性中,屬性名稱首字母或所有字母大寫(類比其他語言中的define或enum)。如: 複製代碼 代碼如下:var Color = {
RED: 1,
BLUE: 2,
GREEN: 3
};
10、對函數中傳入的參數進行檢查。若為基本類型,使用typeof;若為參考型別,使用instanceOf;若要檢查某個對象是否包含某個方法,則對該方法使用typeof操作符,並與字串"undefined"比較。
五、效能
1、避免全域尋找。使用全域變數和函數的開銷要比使用局部變數和函數大,因為全域變數和函數涉及到範圍鏈的尋找。因此,當函數中多次使用全域變數時,就會進行多次範圍鏈的尋找,為了避免這個問題,可以將多次使用的全域變數賦值給一個局部變數,以後都使用該局部變數。
2、避免使用witch語句。with語句會建立自己的範圍,從而導致額外的開銷。
3、避免屬性尋找。屬性尋找是一個O(n)操作,對象上的任何屬性尋找都比訪問變數和數組花費更多時間(訪問變數和數組是O(1)操作)。因此,如果多次用到同一個屬性,則應將其儲存在局部變數中。如: 複製代碼 代碼如下:var sUrl = window.location.href;
var sData = sUrl.substring(sUrl.indexOf("?"));