Does Internet Explorer 9 choke on extra commas at the end of array and object literals?
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 Internet Explorer 9?
Solution 1:
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. :-)
Solution 2:
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.