home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

JavaScript/配列リテラルの要素区切り","について (v1)

JavaScript/配列リテラルの要素区切り","について (v1)

JavaScript / 配列リテラルの要素区切り","について (v1)
id: 443 所有者: msakamoto-sf    作成日: 2009-09-26 16:03:40
カテゴリ: JavaScript 

JavaScript/オブジェクトリテラルのプロパティリストの末尾要素の","についての記事を書き終わった後、ふと配列リテラルの場合が気になったので調べてみました。

ECMA262, 11.1.4 Array Initialiser より :

ArrayLiteral :
    [ Elision(opt) ]
    [ ElementList ]
    [ ElementList , Elision(opt) ]
ElementList :
    Elision(opt) AssignmentExpression
    ElementList , Elision(opt) AssignmentExpression
Elision :
    ,
    Elision ,

これを見る限りは末尾の","は許容されているようです。そこで、簡単なJavaScriptで調べてみました。

var a = [,];
for (var i = 0; i < a.length; i++) {
    alert(a[i]);
}

試してみて驚きですが・・・

Firefox/Chrome
"undefined"が 1回 表示される。
IE8
"undefined"が2回表示される。

どうもIE8の場合は "," を境に二つのundefinedがあるものと解釈されているようです。

var a = [,,,];

とすると、Firefox/Chromeなら3回undefinedがalertされ、IEだと4回alertされます。

ちなみに本当に空っぽの場合は、Firefox/Chrome/IEともに0回でした。(lengthプロパティ == 0)

var a = [];

まとめると、配列リテラルの要素区切りの","については、末尾の","は文法上は許容されています。IEでもエラーになりません。ただし、","で終わるとIE8の場合は暗黙的にundefinedを補完しているらしいことが分かりました。従って、オブジェクトリテラルのプロパティリストの時と同様、安易に最後の","を残しておくと、IEで動かした時にループの最後がおかしくなる場合があるかも知れません。

やはり配列リテラルの場合でも、末尾の","はきちんと削っておいた方が良いようです。

ECMA仕様書、2-in-1の両面スタイルで印刷した紙媒体がマジで欲しい。PDFなのは良いのだけれど、しおりが設定されてないからスクロール作業が頻発してめんどい。紙媒体なら付箋も貼れるし、メモも書き込めるし・・・。



プレーンテキスト形式でダウンロード
表示中のバージョン : 1
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2012-01-04 15:07:19
md5:9f016d4a622a60e26dba2fd34cb681e0
sha1:662dfb5665a3aa74505aad47fb17916bf7eea313
コメント
コメントを投稿するにはログインして下さい。