それにしても、、、

for(var i in hash_obj){
  if(!hash_obj.hasOwnProperty(i)){continue}
  // hash_obj[i]を使用した処理
}

とかいう処理は良く書いているくせに、
配列アクセスの場合にはチェックしわすれるというのは、まだまだ
経験が足らんということか、、、。

ちなみに、mootoolsというprototype.jsを軽量化したようなライブラリには

for(var i=0;array[i];i++){
  //array[i]に関する処理
}

という風にかいてあることがある。
これも、array.length-1より小さい添字の値array[i]が
途中で偽を返す値が入っていると、arrayの全ての値に処理ができない。
が、このfor文より前の処理でそのような値が
入っていないことを保証できれば問題はない。
値が保証できないような処理に使うからこそ、問題となる。

言語は道具。
道具を正しい状況で正しく使うことが重要。
どの道具を使えばよいかの判断は、やっぱり経験なんだな。

と、このあいだの件を通して思った。
とりあえず、もっと取り扱うデータを把握しなくちゃ。
for文内のチェックで逃げてもいいんだけど、
できるだけどのような値を扱っているかを把握していこう。