JavaScriptで配列をループするときには for in ループは使えない。
例えば、以下のような場合は要素ではなく、インデックスがとり出されてしまう。
# print関数が引数を文字列で出力するとして。
これはJavaScriptの for in ループは配列の要素ではなく、オブジェクトのプロパティを列挙するためのものだからだ。
だから、以下のようにすれば、配列の要素以外のものもとり出されてしまう。
だから、JavaScriptで配列をループしたい場合は素直にこう書く。
でも、インデックスとして使っている変数iのスコープはこのループが存在する関数全体になってしまうという問題が残る。
例えば、以下のような場合は要素ではなく、インデックスがとり出されてしまう。
# print関数が引数を文字列で出力するとして。
var a = [ 1, 2, 3, 4, 5 ]; for (var e in a) { print(e); }出力:
0 1 2 3 4
これはJavaScriptの for in ループは配列の要素ではなく、オブジェクトのプロパティを列挙するためのものだからだ。
だから、以下のようにすれば、配列の要素以外のものもとり出されてしまう。
var a = [ 1, 2, 3, 4, 5 ]; a.foo = 'bar'; // どこかでプロパティを設定 for (var e in a) { print(e); }出力:
0 1 2 3 4 foo
だから、JavaScriptで配列をループしたい場合は素直にこう書く。
var a = [ 1, 2, 3, 4, 5 ]; for (var i = 0, l = a.length; i < l; i++) { print(a[i]); }
でも、インデックスとして使っている変数iのスコープはこのループが存在する関数全体になってしまうという問題が残る。
0 件のコメント:
コメントを投稿