1. ホーム
  2. ジャバスクリプト

[解決済み】配列やオブジェクトの末尾のカンマは仕様の一部なのでしょうか?

2022-05-04 10:27:18

質問

JavaScriptでは末尾のカンマは標準ですか、それともChromeやFirefoxのようなほとんどのブラウザでは許容されていますか?

IEがサポートしていないからといって、それが標準ではないということにはならないでしょう。

以下はその例です(booksの配列の最後の要素の後)。

var viewModel = {
    books: ko.observableArray([
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } },
        { title: "..", display: function() { return ".."; } }, // <--right there
    ]),
    currentTemplate: ko.observable("bookTemplate1"),
    displayTemplate: function() { return viewModel.currentTemplate(); }
};

解決方法は?

スペック ECMAScript 5 ECMAScript 3


11.1.5項 をECMAScript 5仕様に追加しました。

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

そう、仕様の一部なのです。

更新してください。 どうやらこれはES5での新機能のようです。ES3(41ページ)では、ただの定義だった。

ObjectLiteral :
    { }
    { PropertyNameAndValueList }


配列リテラルの場合 ( 11.1.4節 ) はさらに興味深いものです ( 更新してください。 これはES3で既に存在していた)。

ArrayLiteral :
    [ Elisionopt ]
    [ ElementList ]
    [ ElementList , Elision_opt ]

(ここで Elision_opt はエリシオン <サブ オプト エリシオンは任意であることを意味する)

Elision は次のように定義されます。

Elision :
    ,
    Elision ,

つまり、以下のような配列リテラルは

var arr = [1,2,,,,];

は完全に合法です。これは2つの要素を持つ配列を作成しますが、配列の長さを 2 + 3 = 5 .

IE(IE9以前)に過度な期待は禁物です...。