Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 577
user621486 Avatar asked Feb 18 '11 00:02

user621486


People also ask

Can trailing commas be used in objects and arrays?

JavaScript has allowed trailing commas in array literals since the beginning. Trailing commas are now also allowed in object literals, function parameters, named imports, named exports, and more.

What is a trailing comma?

A trailing comma, also known as a dangling or terminal comma, is a comma symbol that is typed after the last item of a list of elements. Since the introduction of the JavaScript language, trailing commas have been legal in array literals. Later, object literals joined arrays.


2 Answers

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. :-)

like image 63
T.J. Crowder Avatar answered Oct 18 '22 17:10

T.J. Crowder


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.

like image 24
user113716 Avatar answered Oct 18 '22 17:10

user113716