問題十五 為什麼 for .. in 沒辦法走訪多個物件?
今天同事碰到一個問題,他在撰寫 Coffeescript 的時候,她使用 for..in 來走訪物件,但是卻一直跑不出來,一開始原本以為是 Node.js 的平行處理的特性導致的問題,但是後來發現原因只是因為寫錯了。
原因是 for.. in 只能用來走訪「陣列」,而如果要走訪「物件」,需要使用 for...of 才行。
範例:
for variable of object
for variable in array
我查了一下資料,其實 for in 跟 for of 是 ECMAScript 6 才有明確規範的,目前的話是 Coffeescript 自己實做的,舉例來說
arr = [1,2,3,4]
arr2 =
'1':2
'2':3
for i in arr
console.log i
for i2 of arr2
console.log i2
這個 Coffeescript 的 Simple Code 會轉成
var arr, arr2, i, i2, _i, _len;
arr = [1, 2, 3, 4];
arr2 = {
'1': 2,
'2': 3
};
for (_i = 0, _len = arr.length; _i < _len; _i++) {
i = arr[_i];
console.log(i);
}
for (i2 in arr2) {
console.log(i2);
}
所以在使用 Coffeescript 的時候要注意目標的型態。
參考資料
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of