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: 16: };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 了
沒有留言:
張貼留言