知識社群登入
位置: Web Programming > 文件區 > Javascript > NOTE
by 蘇德宙, 2012-06-04 22:06, 人氣(1341)
從書上看來的,心有戚戚焉
1. 可讀性
2. 一致姓
3. 可預料的 (簡單邏輯)
4. 看起來要像是同一個人寫的
5. 文件化

因為,程式在許多情況下需要重新查看、修改和調整
1. 有 bug 被發現
2. 新增功能
3. 在新環境中執行 (新的瀏覽器)
4. 程式用途改變
5. 移植程式碼 ...

如果程式碼缺乏上述的特點,將從撰寫時的 man-hours 演變成 man-weeks ....
by 蘇德宙, 2012-05-20 23:21, 人氣(1556)
減少全域變數
一律使用 var
未宣告就使用的變數, ex
function foo() {
  var a = b = 0;  // b 未宣告,所以是global
}


變數宣告時同時初始化
1. 在函數一開始就宣告
   - 被定義的變數只須尋找單一地方
   - 避免困擾,任何地方宣告都等同於一開始就宣告的特性 (hoisting)
2. 初始化,提升可讀性
   var a = 1,      // a 是一個數字
       b = "str"; // b 是一個字串


縮排
4 個空白


大括號
永遠都加,即使只有一行的敘述 (換行)
if (true) {
  ...
}
這可以避免行尾自動加 ; 號的問題,例如
function func() {
   return   // return undefined, 並且以下不會執行!
   {
       name: "tcsu"
   }
}

PS: 同一行則不用加,例如 if (error) return false;


空格
為了閱讀上更清晰的目的,每個 , 號後面要留白
for (var i=0; i<max; i++) { ... }


命名
建構式微首字母大寫, var a = new Person(); 看名稱就可以區隔函數
變數: lastIndex (camel case,第二個詞以後的第一個字母大寫)
全域變數: gMax (g 開頭,容易被識別出來,盡量不使用全域變數)
常數: PI = 3.14 (全大寫)
private: _name (底線開頭,警告開發者不要直接使用)



by 蘇德宙, 2012-05-20 09:42, 人氣(1253)
迴圈 for,判斷式要先計算取得常數
尤其在一些 HTML Collection
for (var i=0; i<document.images.length; i++) { ... } // 速度很慢,每次都會重新檢查網頁
for (var i=0, max=document.images.length; i<max; i++) { ... }
by 蘇德宙, 2012-05-20 09:23, 人氣(1346)
避免隱含的型別轉換,用 === 取代 ==
false == 0 (true)
false === 0 (false)


使用 parseInt() 要加 base,可以改用 Number()
尤其在 form 中的日期 (0 開頭會解釋為 8 進位),例如
var m = '09';
m = parseInt(09);  // m = 0, 因為 09 不是 8 進位
m = Number(m);  // 速度更快


避免使用 eval()
不安全,尤其 ajax 的 json
如果一定要,用 JSON.parse 或 Json.org 提供的 lib


setTimeout() 比較好的寫法
因為字串會被視為程式碼去解析
setTimeout("func()", 1000);     >> setTimeout(func, 1000);
setTimeout("func(1, 2)", 1000); >> setTimeout(function() {func(1, 2);}, 1000);