良好的習慣總是讓人受益匪淺,在編寫代碼的時候,良好的習慣會使得開發更加地高效,減少出錯的幾率,甚至提高代碼的運行效率,下面是一些在 JavaScript 代碼編寫中應該注意的幾個問題,它們都非常容易遇到,卻又可能非常容易地被忽略。
1. 減少不必要的全部變數
關於全域變數,這是 JavaScript 非常糟糕的一個特性,它非常地容易被建立,特別是被不小心地建立。在程式變得複雜,或者同時運行多個程式的時候,它可能帶來難以調試的錯誤。在定義變數前加上 var,是首先應該注意並警惕的。
function fn(){ var a = 1; //局部變數 b = 1; //全域變數}
2. 正確書寫 script 標籤
如果你的 script 標籤中還帶有 language 屬性,說明你真的奧特了,趕緊去掉吧,這個屬性早已經被 W3C 開除了,在 XHTML 1.0嚴格型中(Strict),甚至已經不再支援這個屬性。需要提醒一點的是,在 Html5 中,script 標籤也不再需要 type 屬性,對於 Html5 來說,JavaScript 是唯一被支援的指令碼語言。
<!-- XHTML 1.0 --><script type="javascript"></script><!-- HTML 5 --><script></script>
3. 去掉JSON最後一組索引值對後面的逗號
如果你的代碼像下面這樣,在 IE 中會報錯,並且這個錯誤很難被發現,IE 的報錯也不會提供任何有價值的資訊,唯一能做的就是在編寫的時候格外小心,如果你的 JSON 是後端返回的,那麼記得在下周一上班時把這個資訊傳達給後端程式員。
var post = { title : "養成JavaScript代碼編寫的好習慣", postDate : "2010-07-16", author : "堅強的小展", //注意,這個逗號會讓程式在 IE 的所有版本下報錯。}
4. 避免依賴 typeof 驗證資料類型
typeof 是用來驗證資料類型的方法,不幸的是,當需要驗證的資料類型為數組、函數等時,這個方法並不能返回我們想象中的結果。事實上這並不是 typeof 的錯,在 JavaScript 中,數組和函數的本質實際上也是對象,但這的確給我們帶來了麻煩。
/** 依賴 typeof 的驗證結果 **/var a = [];typeof a; // "object"var b = function(){};typeof b; // "object";typeof null; // "object"
/** 正確的驗證方法 **/var a = [];a.constructor === Array; // truevar b = function(){};b.constructor === Function; // true/** 驗證某個變數是否為null **/typeof c === "undefined"; //true
5. 使用全等運算子代替相當相當運算子
作為弱類型語言的 JavaScript 似乎讓我們習慣了不注重變數的資料類型,這樣的偷懶看上去讓我們變得輕鬆一些了,但這在運算的時候可能會帶來更大的麻煩。推薦的做法是在開發中明確地瞭解 變數當前的資料類型,並且在做相等判斷的時候,使用 === 運算子來代替 == 運算子,這意味著在進行比較前,必須確保參與比較的兩個變數屬於同一資料類型。這樣做的好處可以避免 JavaScript 在處理不同資料類型的比較時自動轉換資料類型可能帶來的麻煩,同時也可以提高程式的運行效率。
0 == ""; // true0 === ""; // false1 == "1"; // true1 === "1"; // false
6. 避免使用 with 和 eval
這一點被人提得比較多,這裡就不再多說了,避免使用它們,以增加程式的可讀性、安全性,減小出錯的機率,提高運行效率。