微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组和对象中的尾部逗号是否属于规范的一部分?

如何解决数组和对象中的尾部逗号是否属于规范的一部分?

规格:ECMAScript 5ECMAScript 3

5规范中的11.1.5节:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }

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

显然,这是ES5中的新功能。在ES3(第41页)中,定义仅为:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }

对于数组文字(第11.1.4节),它甚至更有趣( ES3中已经存在):

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

Elision_optElision opt在哪里,这意味着Elision是可选的)

Elision 被定义为

Elision :
    ,
    Elision ,

因此,像这样的数组文字

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

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

不要对IE期望太多(在IE9之前)…

解决方法

JavaScript中的尾部逗号是标准格式,还是像Chrome和Firefox这样的大多数浏览器都可以接受?

我以为它们是标准的,但是IE8在遇到一个标准后就呕吐了—当然IE几乎不支持某些功能,这意味着它不是标准的。

这是我的意思的示例(在books数组的最后一个元素之后):

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。