#navi_header|JavaScript| [[442]]の記事を書き終わった後、ふと配列リテラルの場合が気になったので調べてみました。 ECMA262, 11.1.4 Array Initialiser より : #pre||> ArrayLiteral : [ Elision(opt) ] [ ElementList ] [ ElementList , Elision(opt) ] ElementList : Elision(opt) AssignmentExpression ElementList , Elision(opt) AssignmentExpression Elision : , Elision , ||< これを見る限りは末尾の","は許容されているようです。そこで、簡単なJavaScriptで調べてみました。 #code|javascript|> var a = [,]; for (var i = 0; i < a.length; i++) { alert(a[i]); } ||< 試してみて驚きですが・・・ : Firefox/Chrome : "undefined"が 1回 表示される。 : IE8 : "undefined"が ''2回'' 表示される。 : IE9 : "undefined"が 1回 表示される。(new!) どうもIE8の場合は "," を境に二つのundefinedがあるものと解釈されているようです。 var a = [,,,]; とすると、Firefox/Chrome/IE9なら3回undefinedがalertされ、IE8だと4回alertされます。 ちなみに本当に空っぽの場合は、Firefox/Chrome/IEともに0回でした。(lengthプロパティ == 0) var a = []; まとめると、配列リテラルの要素区切りの","については、末尾の","は文法上は許容されています。IEでもエラーになりません。ただし、","で終わるとIE8の場合は暗黙的にundefinedを補完している ''らしい'' ことが分かりました。従って、オブジェクトリテラルのプロパティリストの時と同様、安易に最後の","を残しておくと、IE8で動かした時にループの最後がおかしくなる場合があるかも知れません。 やはり配列リテラルの場合でも、末尾の","はきちんと削っておいた方が良いようです。 #navi_footer|JavaScript|