数组和对象中的尾随逗号是规范的一部分吗?
在JavaScript中尾随逗号是标准的,还是像Chrome和Firefox这样的大多数浏览器只是容忍它们?
我认为它们是标准的,但IE8在遇到IE之后呕吐,当然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
ECMAScript 5规范中的第11.1.5节:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
所以是的,它是规范的一部分。
更新:显然这是ES5中的新功能。 在ES3(第41页)中,定义只是:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
对于数组文字(第11.1.4节),它更加有趣( 更新:这已经存在于ES3中):
ArrayLiteral :
[ Elisionopt ]
[ ElementList ]
[ ElementList , Elision_opt ]
(其中Elision_opt
是Elisionopt,这意味着Elision是可选的)
Elision
被定义为
Elision :
,
Elision ,
所以,像一个数组文字
var arr = [1,2,,,,];
是完全合法的。 这将创建一个包含两个元素的数组,但将数组长度设置为2 + 3 = 5
。
不要期望IE过多(在IE9之前)......
只是提醒/警告,这是JavaScript / ECMAScript标准和JSON标准不同的地方之一; 尾随逗号在JS中有效,但在JSON中无效。
更有趣的是,IE7给出了
[1,].length --> 2
而Firefox和Chrome
[1,].length --> 1
链接地址: http://www.djcxy.com/p/27275.html
上一篇: Are trailing commas in arrays and objects part of the spec?