なぜ"for ... in"を使って配列の反復をするはダメなの? [Javascript]

このエントリーをはてなブックマークに追加

質問:

JavaScriptの配列で for ... inを使わないように言われたんだけど、何故なの?

By lYriCAlsSH | 質問日時: 2009年2月1日 9:46



回答1:

その理由はこう。まずこんなコンストラクトを考えてみる:

var a = []; //新しい空の配列を作成
a[5] = 5; //配列のサイズを変更する完全に合法なJavaScript
for (var i = 0; i < a.length; i++) {
//誰もがわかってると思うけど、0から5までの数値インデックスをループする。
console.log(a[i]);
}
/* これは以下を出力するはず
undefined
undefined
undefined
undefined
undefined
5
*/

これはときどき他とは全く異なる場合がある:

var a = [];
a[5] = 5;
for (var x in a) {
//明示的に設定されたインデックス "5"のみを表示し、0〜4を無視
console.log(x);
}
/* 以下が出力するはず
5
*/

JavaScriptライブラリは時々こんなことをして、作成する配列に影響を与えるのに注意:

// JavaScriptライブラリのどこかに...
Array.prototype.foo = 1;
//今、下のコードが何をするのか分からないと思う。
var a = [1, 2, 3, 4, 5];
for (var x in a){
    // fooはすべての配列の一部で、
    //ここに 'x'の値として表示される。
console.log(x);
}
/* 以下が出力するはず:
0
1
2
3
4
foo
*/

By Triptych | 回答日時: 2009年2月1日 10:08



Source: Why is using “for…in” with array iteration a bad idea?

共有 コメント