Internet Explorer 9 soffoca le virgole extra alla fine della matrice e dei letterali degli oggetti?

I browser e ambienti moderni come Node.js ti consentono di dire {a: 1, b: 2,} o [1,2,3,]. Questo è stato storicamente problematico con Internet Explorer. È stato risolto in Internet Explorer 9?

Esistono due diverse risposte a questa, una per le virgole in virgola mobile negli inizializzatori degli oggetti e una per le virgole in virgola mobile negli inizializzatori di array:

Per gli inizializzatori di oggetti , ad esempio:

 var obj = { a: 1, b: 2, c: 3, }; 

È stato risolto in IE8 e versioni successive. Provalo qui: http://jsbin.com/UXuHopeC/1 ( fonte ). IE7 e versioni precedenti generano un errore di syntax su } dopo la virgola penzolante.

Per gli inizializzatori di array , ad esempio:

 var arr = [ 1, 2, 3, ]; 

È stato “risolto” in IE9 e versioni successive. Provalo qui: http://jsbin.com/UXuHopeC/2 ( fonte ). IE8 e precedenti forniranno a quell’array quattro voci, l’ultima con valore undefined . IE9 e versioni successive danno tre voci.

Ho messo “riparato” tra virgolette perché la specifica non era in origine chiara sul fatto che la matrice dovesse avere una voce non undefined finale o meno, quindi nessun comportamento era errato. È solo che IE è andato da una parte e tutti gli altri sono andati dall’altra. 🙂

Questo documento afferma che è / sarà corretto: http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more. aspx

Problemi corretti

Le virgole finali nei letterali di array aggiunte alla lunghezza dell’array

Esempio

var len = [1,2,3,].length;

alert(len); //should be 3, IE8 says 4

Non fa menzione specifica di oggetti. Solo array.


EDIT: maggiori informazioni. Da questo documento PDF:

http://download.microsoft.com/download/8/4/2/8427CF1B-08B3-4557-952D-102E7A8FA64C/%5BMS-ES3%5D.pdf

… scaricato da questa pagina: http://msdn.microsoft.com/en-us/library/ff520996(VS.85).aspx

JScript 5.8 supporta l’occorrenza di una singola virgola finale come ultimo elemento all’interno di un ObjectLiteral. JScript 5.7 non supporta questa estensione.