Me pregunto si una coma detrás de una matriz en javascript es válida.
var settings = { 'foo' : oof, 'bar' : rab, };contra
var settings = { 'foo' : oof, 'bar' : rab };Tenga en cuenta que el segundo ejemplo no tiene una coma después de la última clave/valor.
La mayoría de los navegadores e implementaciones permiten una coma final, el gran PERO es "Internet Explorer".
Una coma final en la mayoría de las versiones de Internet Explorer causa GRANDES problemas. Lanzará errores extraños, locos , extraños e irrazonables... ¡no tienes idea de dónde estás! Esto es terrible , caerás en profundas y graves depresiones . La enfermedad también tiene un nombre, "coma malvada de la perdición", como se le llamó una vez.
Conclusión: ¡NUNCA… jamás! use una coma final en Javascript.
Históricamente hablando, ES3 NO permitía una coma final al definir un objeto literal. Esto fue algo que IE hizo bien, pero la mayoría de los otros proveedores de arqueros fueron en contra de las especificaciones y lo permitieron de todos modos. Entonces, técnicamente, fue un error en los otros navegadores que lo admitían. En ES3, un ObjectLiteral se definió como,
ObjetoLiteral
{ }
{ NombreDePropiedadYListaDeValores }
Más tarde, ES5 resolvió este problema yendo con la mayoría y legitimando la coma final colocándola en la especificación. Ahora un ObjectLiteral se define como,
ObjetoLiteral
{ }
{ NombreDePropiedadYListaDeValores }
{ NombreDePropiedadYListaDeValores , }
Fíjate en la coma final al final.
Aunque la coma final se define en un objeto literal, aún no se permite en JSON según ES5. Entonces, mientras que el siguiente objeto literal es válido,
{ foo: "bar", }el siguiente JSON no lo es,
'{ "foo": "barra", }'
La gramática para un JSONObject es,
Objeto JSON
{ }
{ Lista de miembros JSON }
Lista de miembros JSON
JSONMiembro
JSONMiembroLista, JSONMiembro
JSONMiembro
Cadena JSON: valor JSON
En resumen, si no desea preocuparse por las especificaciones o las peculiaridades del navegador, NO agregue una coma al final.
Con respecto a los objetos literales al menos (el título de la pregunta menciona una matriz, pero el ejemplo es un objeto literal) depende de dónde se esté ejecutando su js. Las comas finales en los objetos literales son válidas en ES5. Aunque las comas finales pueden causar problemas en la web (en IE), la mayoría de los minificadores las eliminarán de todos modos.