Modern browsers and environments like Node.js allow you to say {a:1, b:2,} or [1,2,3,]. This has historically been problematic with Internet Explorer. Is this fixed in Inter
This document claims it is/will be corrected: http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
Corrected Issues
Trailing commas in array literals added to the array’s length
Example
var len = [1,2,3,].length;
alert(len); //should be 3, IE8 says 4
It makes no specific mention of Objects. Just Arrays.
EDIT: More info. From this PDF document:
http://download.microsoft.com/download/8/4/2/8427CF1B-08B3-4557-952D-102E7A8FA64C/[MS-ES3].pdf
...dowloaded from this page: http://msdn.microsoft.com/en-us/library/ff520996(VS.85).aspx
JScript 5.8 supports the occurrence of a single trailing comma as the last item within an ObjectLiteral. JScript 5.7 does not support this extension.
There are two different answers to this, one for dangling commas in object initializers and one for dangling commas in array initializers:
For object initializers, e.g.:
var obj = {
a: 1,
b: 2,
c: 3,
};
It's fixed in IE8 and above. Test it here: http://jsbin.com/UXuHopeC/1 (source). IE7 and earlier will throw a syntax error on the }
after the dangling comma.
For array initializers, e.g.:
var arr = [
1,
2,
3,
];
It was "fixed" in IE9 and above. Test it here: http://jsbin.com/UXuHopeC/2 (source). IE8 and earlier will give that array four entries, the last one having the value undefined
. IE9 and above give it three entries.
I put "fixed" in quotes because the spec was originally unclear about whether the array should have a final undefined
entry or not, so neither behavior was incorrect. It's just that IE went one way and everyone else went the other. :-)