for Loops
1: // sub-optimal loop
2: for (var i = 0; i < myarray.length; i++) {
3: // do something with myarray[i]
4: }
5:
6: //應使用下面的寫法
7: for (var i = 0, max = myarray.length; i < max; i++) {
8: // do something with myarray[i]
9: }
如果要套上剛剛所說的 single var 的寫法的話
1: function looper() {
2: var i = 0,
3: max,
4: myarray = [];
5: // ...
6: for (i = 0, max = myarray.length; i < max; i++) {
7: // do something with myarray[i]
8: }
9: }
還可以更簡單嗎?? 下面只用到兩個變數
1: function foo(){
2: var myarray = [],
3: i = myarray.length;
4: while(i--){
5: // do something with myarray[i]
6: }
7: }
for-in Loops
for-in loops 大部份是用在不是 array 的物件身上,雖然也可以用在 Array 上,但並不建議。
在使用上可以用 hasOwnProperty(i) 來過濾物件屬性。如下面的 code 該物件有一個 clone() 的 function,就可以用 hasOwnProperty 來將其濾除
1: // the object2: var man = {3: hands: 2,
4: legs: 2,
5: heads: 1
6: };
7: // somewhere else in the code8: // a method was added to all objects9: if (typeof Object.prototype.clone === "undefined") {10: Object.prototype.clone = function () {};11: }
12:
13: // 1.14: // for-in loop15: for (var i in man) {16: if (man.hasOwnProperty(i)) { // filter17: console.log(i, ":", man[i]);18: }
19: }
20: /*21: result in the console22: hands : 223: legs : 224: heads : 125: */26: // 2.27: // antipattern:28: // for-in loop without checking hasOwnProperty()29: for (var i in man) {30: console.log(i, ":", man[i]);31: }
32: /*33: result in the console34: hands : 235: legs : 236: heads : 137: clone: function()38: */
不要用 eval()
這個應該不用多說, eval 會有潛在的安全性問題。
parseInt() 的注意事項
如果使用者輸入日期格式的文字在要 parseInt 的值時,在 舊版本的 javascript 會將該文字當作 8 進位來計算,會造成錯誤。所以在用 parseInt 時要指定 radix 的值
1: var month = "06",
2: year = "09";
3: month = parseInt(month, 10);
4: year = parseInt(year, 10);
在大多數的狀況下也可以用下面的方式
1: +"08" // result is 8
2: Number("08") // 8
雖然速度會比較快一點,不過因為 parseInt 還做了 parse 的動作,所以像 “08 hello” 這樣子的文字還是可以正常的 parse 出來,而 用上面方法的就只會回傳 NaN 了