JavaScriptのループ その1

2015年6月22日月曜日

JavaScript

JavaScriptで配列をループするときには for in ループは使えない。
例えば、以下のような場合は要素ではなく、インデックスがとり出されてしまう。
# 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のスコープはこのループが存在する関数全体になってしまうという問題が残る。