数组和对象中的尾随逗号是规范的一部分吗?

2022-08-30 00:57:33

尾随逗号在JavaScript中是标准的,还是像Chrome和Firefox这样的大多数浏览器只是容忍它们?

我以为它们是标准的,但是IE8在遇到一个后就噗

以下是我的意思的一个例子(在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(); }
};

答案 1

产品规格: ECMAScript 5ECMAScript 3


ECMAScript 5 规范中的第 11.1.5 节

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

所以,是的,它是规范的一部分。

更新:显然,这在ES5中是新的。在ES3(第41页)中,定义只是:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

对于数组文本(第11.1.4节),它更有趣(更新:这在ES3中已经存在):

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

(其中Elisionopt,意味着Elision是可选的)Elision_opt

Elision定义为

Elision :
    ,
    Elision ,

所以,数组文字像

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

是完全合法的。这将创建一个具有两个元素的数组,但将数组长度设置为 。2 + 3 = 5

不要对IE(在IE9之前)期望太高...


答案 2

只是一个快速提醒/警告,这是JavaScript / ECMAScript标准JSON标准不同的领域之一;尾随逗号在 JS 中有效,但在 JSON 中无效