数组和对象中的尾部逗号是否属于规范的一部分?
JavaScript中的尾部逗号是标准格式,还是像Chrome和Firefox这样的大多数浏览器都可以接受?
我以为它们是标准的,但是IE8在遇到一个标准后就呕吐了—当然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
5规范中的11.1.5节:
ObjectLiteral : { }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
是的,它是规范的一部分。
显然,这是ES5中的新功能。在ES3(第41页)中,定义仅为:
ObjectLiteral : { }
{ PropertyNameAndValueList }
对于数组文字(第11.1.4节),它甚至更有趣(
ES3中已经存在):
ArrayLiteral : [ Elisionopt ]
[ ElementList ]
[ ElementList , Elision_opt ]
(Elision_opt
Elision opt在哪里,这意味着Elision是可选的)
Elision
被定义为
Elision : ,
Elision ,
因此,像这样的数组文字
var arr = [1,2,,,,];
是完全合法的。这将创建一个包含两个元素的数组,但将数组长度设置为2 + 3 = 5
。
不要对IE期望太多(在IE9之前)…
以上是 数组和对象中的尾部逗号是否属于规范的一部分? 的全部内容, 来源链接: utcz.com/qa/405272.html