home Glamenv-Septzen(ぐらめぬ・ぜぷつぇん)(archive)

JavaScript/オブジェクトリテラルのプロパティリストの末尾要素の","について

作成日: 2009-09-26 15:28:52   /   last updated at: 2009-09-26 15:51:01
カテゴリ: JavaScript 

オブジェクトリテラルのプロパティリストの末尾要素の","というのは、

var o = {
    abc : 123,
    def : 456,
             ^ ここのこと
};

である。

結論から言うと、ECMAの仕様上は末尾要素の","は定義されていない。つまり文法エラーとされても問題ない。
IE6/7/8の場合はエラーとなった。
一方Firefox3/3.5, Chrome3などではエラーにならなかった。

ECMA262, 11.1.5 Object Initialiserより:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

PropertyNameAndValueList :
    PropertyName : AssignmentExpression
    PropertyNameAndValueList , PropertyName : AssignmentExpression

このように、末尾要素の","は定義されていない。

PHPやPythonなど近年のスクリプト言語の多くが配列やハッシュ形式の末尾の","を許してくれているので、JavaScriptでもついつい残したままにしてしまう。Firebugが便利なので、当初はFirefox上で作っていて、末尾","が残ったままIEで動作確認すると正体不明のエラーに遭遇した。ということでよくよく調べたらIE系は末尾","をまじめにエラーとしていただけの話。

いや、でも、マジで一昨日の私の3時間を返して欲しい。


original url: https://www.glamenv-septzen.net/view/442