¿Las comas finales son estándar en JavaScript, o la mayoría de los navegadores como Chrome y Firefox simplemente las toleran?
Pensé que eran estándar, pero IE8 vomitó después de encontrar uno; por supuesto, IE no admite algo difícilmente significa que no es estándar.
Aquí hay un ejemplo de lo que quiero decir (después del último elemento de la matriz de libros):
var viewModel = {
books: ko.observableArray([
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } }, // <--right there
]),
currentTemplate: ko.observable("bookTemplate1"),
displayTemplate: function() { return viewModel.currentTemplate(); }
};
javascript
Adam Rackis
fuente
fuente
Respuestas:
Especificaciones: ECMAScript 5 y ECMAScript 3
Sección 11.1.5 en la especificación ECMAScript 5:
Entonces sí, es parte de la especificación.
Actualización: aparentemente esto es nuevo en ES5. En ES3 (página 41), la definición era solo:
Para los literales de matrices ( Sección 11.1.4 ) es aún más interesante ( Actualización: esto ya existía en ES3):
(donde
Elision_opt
está optado Elision , lo que significa que Elision es opcional)Elision
Se define comoEntonces, una matriz literal como
Es perfectamente legal. Esto crea una matriz con dos elementos pero establece la longitud de la matriz en
2 + 3 = 5
.No esperes demasiado de IE (antes de IE9) ...
fuente
Solo un recordatorio / advertencia rápida de que esta es una de las áreas en las que difieren el estándar JavaScript / ECMAScript y el estándar JSON ; las comas finales son válidas en JS pero no válidas en JSON.
fuente
Lo que es aún más divertido, IE7 da
mientras que Firefox y Chrome
fuente
[1,,].length
da2
. Sentido : los navegadores no hacen ninguno.Puede encontrar la especificación para javascript (también conocido como ECMA Script) aquí . Puede encontrar la definición relevante para las matrices en la página 63 y, como señaló Felix, la definición del objeto un par de páginas más adelante en la página 65.
Si bien esta especificación dice que está bien tener un seguimiento
,
, no sé si eso sería cierto mirando hacia atrás algunas versiones. Como ha notado, IE8 se arruinará si deja una coma final, pero Chrome y FF lo manejan bien.fuente
Analicemos esto.
Si. A partir de la especificación ECMAScript 5 (también parte de la guía de estilo de Google y Airbnb)
Esta es una pregunta de soporte de ECMAScript 5.
Los transpiladores como Babel eliminarán la coma adicional adicional en el código transpilado, lo que significa que no tiene que preocuparse por el problema de la coma final en los navegadores heredados.
Entonces eso significa:
Por lo tanto, es probable que si está usando algo ES5 y superior, no necesita preocuparse por eso.
Nuevamente, esa es una pregunta de soporte de ECMAScript 5. IE8 no es compatible con ECMAScript 5 (solo IE9 y superior)
Recomiendo echar un vistazo a la documentación obsoleta ES5 de Airbnb https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas
También recomendaría los documentos de Mozilla:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
fuente
En Chrome 52:
Simplemente no me gustan las comas finales. La gente generalmente los usa en proyectos de código abierto para evitar borrar la línea escrita por otro comisionado. Vea la misma pregunta en Python: https://stackoverflow.com/a/11597911/968988
fuente
[1,]
: claramente hay algo antes de la coma. Pero[,]
hay tanto antes como después de la coma. Entonces, como no entiendo[,]
solo, no creo que usar[1,]
sea una buena idea.