Ada*_*kis 207 javascript
JavaScript中的尾随逗号是标准的,还是像Chrome和Firefox这样的大多数浏览器只是容忍它们?
我认为它们是标准的,但IE8遇到一个当然IE浏览器不支持的东西几乎不意味着它不标准.
这是我的意思的一个例子(在书籍数组的最后一个元素之后):
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(); }
};
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 202
ECMAScript 5规范中的第11.1.5节:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
Run Code Online (Sandbox Code Playgroud)
是的,它是规范的一部分.
更新:显然这是ES5中的新功能.在ES3(第41页)中,定义只是:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
Run Code Online (Sandbox Code Playgroud)
对于数组文字(第11.1.4节),它更有趣(更新:这已经存在于ES3中):
ArrayLiteral :
[ Elisionopt ]
[ ElementList ]
[ ElementList , Elision_opt ]
Run Code Online (Sandbox Code Playgroud)
(Elision_opt
Elision 选择哪里,意味着Elision是可选的)
Elision
被定义为
Elision :
,
Elision ,
Run Code Online (Sandbox Code Playgroud)
所以,数组文字就像
var arr = [1,2,,,,];
Run Code Online (Sandbox Code Playgroud)
是完全合法的.这将创建一个包含两个元素的数组,但将数组长度设置为2 + 3 = 5
.
不要期望从IE(IE9之前)太多...
Joe*_*bey 88
只是一个快速提醒/警告,这是JavaScript/ECMAScript标准和JSON标准不同的领域之一; 尾随逗号在JS 中有效,但在JSON中无效.
see*_*eeg 51
什么是更有趣,IE7给出
[1,].length --> 2
Run Code Online (Sandbox Code Playgroud)
而Firefox和Chrome
[1,].length --> 1
Run Code Online (Sandbox Code Playgroud)