[Bug] [AS3] 配列に不要なカンマが入って undefined が紛れ込む

Posted: 2014-09-17
Category: BugPattern
Tags: #AS3

概要

AS3 で配列を扱っている部分で、想定していない要素が処理されている感じがする。

// 例えば配列内のタスクを連続実行するような関数があるとして
runProcesses([
    ,_initHogeHoge
    ,_loadFugaFuga
    ,_doPiyoPiyo
]);
// ... 何か挙動がおかしいぞ?

原因

AS3 では、配列のリテラルでカンマだけを打つ記述が許されるようだ。 上記の例では、_initHogeHoge の前に想定しないカンマが打たれていたが、 コンパイルエラーが出ないので気づきにくい。

公式のドキュメント をざっと見ても該当する部分は見当たらなかったが、 カンマだけ打った場合は undefined が書かれたのと同じになるようだ。

// この記述は通る
// [undefined, 2, undefined, 4] と等価っぽい
var list:Array = [, 2, , 4];

for each (var item:* in list) {
    trace(item);
}
/* 出力結果:
   -----------------
   undefined
   2
   undefined
   4
 */

解決法

気をつけましょう。