try catch ではまる。var obj:Obj; → var obj:Obj = null;で完全に初期化せよ

var obj:Obj; → var obj:Obj = null;で完全に初期化せよ

try catchはエラーがでない分、普段ならでるはずのnullエラーがでなくて原因がつかみにくかった。

for(){
var obj:Obj;//★0
try{
obj = arr[i][j] as Obj; }catch(err:*){

}
if(obj != null){//★1
//objがあったときの処理★2
}

}

結論から言うと、★0は初期化されていない場合があって危険だということ。
つまり、★0の書き方では、objがnullにならない場合がある。
その結果、★1で、nullかどうかのチェックの結果が意図しないものになる。

対策としては、

var obj:Obj = null;//★0_2

のように明記すること。

この嵌りポイントに気づきにくくしていた要因がtry

try内でnull参照エラーがでたとき、普段はそれで気づくのだけれども、それがでない。
で、なにもないときはobjにnullが代入されるという感覚があったのだけれど、冷静に考えれば、try内でエラーが発生したら、そもそもobjに代入を行う前にその行の処理は終わってしまう。
したがって、以前のobjの値のままになるということ。

その結果、上の例だと★2が、意図したよりもたくさん実行される、みたいなことが起きてしまった。