for in ループを誤解していた

ECMAScript の for in ループは、他の言語みたいに以下のように書けるものなんだと思っていました。

for(var obj in objects) {
  obj.doSomething();
}

しかしいざ実行してみるとエラー(TypeError)が出てしまいます。

自分の脳内では、obj変数にはobjectsの各要素が入ってくれるんだと思っていたのですが、ちゃんとドキュメントを見てみるとどうやらここには添え字が入ってくるようです。つまり、以下のように書くのが正解。

for(var i in objects) {
  objects[i].doSomething();
}

勝手な思い込みではまってしまったようです……。

ちなみにこれは配列に限らずハッシュでもいけるみたいですね。添え字の変数にはキーが入ります。