Czy końcowe przecinki w JavaScript są standardem, czy też większość przeglądarek takich jak Chrome i Firefox je toleruje?
Myślałem, że są standardowe, ale IE8 rzygał po napotkaniu jednego - oczywiście brak obsługi czegoś przez IE nie oznacza, że nie jest to standard.
Oto przykład tego, co mam na myśli (po ostatnim elemencie tablicy książek):
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
źródło
źródło
Odpowiedzi:
Specyfikacja: ECMAScript 5 i ECMAScript 3
Sekcja 11.1.5 specyfikacji ECMAScript 5:
Tak, jest to część specyfikacji.
Aktualizacja: Najwyraźniej jest to nowość w ES5. W ES3 (strona 41) definicja była po prostu:
W przypadku literałów tablic ( Rozdział 11.1.4 ) jest to jeszcze bardziej interesujące ( Aktualizacja: już to istniało w ES3):
(gdzie
Elision_opt
jest opcja Elision , co oznacza, że Elision jest opcjonalna)Elision
jest zdefiniowany jakoTak więc dosłownie tablica
jest całkowicie legalny. Tworzy to tablicę z dwoma elementami, ale ustawia długość tablicy na
2 + 3 = 5
.Nie oczekuj zbyt wiele od IE (przed IE9) ...
źródło
Krótkie przypomnienie / ostrzeżenie, że jest to jeden z obszarów, w których różnią się standardy JavaScript / ECMAScript i JSON ; końcowe przecinki są poprawne w JS, ale nie są poprawne w JSON.
źródło
Co jest jeszcze śmieszniejsze, daje IE7
podczas gdy Firefox i Chrome
źródło
[1,,].length
daje2
. Sens : przeglądarki nie robią nic.Możesz znaleźć specyfikację javascript (aka ECMA Script) tutaj . Odpowiednią definicję tablic można znaleźć na stronie 63, a jak zauważył Felix, definicję obiektu kilka stron później na stronie 65.
Chociaż ta specyfikacja mówi, że dobrze jest mieć końcowy
,
, nie wiem, czy to prawda, patrząc wstecz na kilka wersji. Jak zauważyłeś, IE8- sam się załamie, jeśli pozostawisz przecinek końcowy, ale Chrome i FF poradzą sobie dobrze.źródło
Rozwalmy to.
Tak. Od specyfikacji ECMAScript 5 (również stanowi część przewodnika po stylu Google i Airbnb)
To jest pytanie pomocnicze dotyczące ECMAScript 5.
Transpilatory takie jak Babel usuną dodatkowy przecinek końcowy w transpilowanym kodzie, co oznacza, że nie musisz się martwić o problem z końcowym przecinkiem w starszych przeglądarkach.
Wiec to znaczy:
Są więc szanse, że jeśli używasz czegokolwiek ES5 i więcej, nie musisz się tym martwić.
Ponownie, jest to pytanie pomocnicze dotyczące ECMAScript 5. IE8 nie obsługuje ECMAScript 5 (tylko IE9 i nowsze)
Zdecydowanie poleciłbym rzucić okiem na przestarzałą dokumentację Airbnb ES5 https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas
Poleciłbym także Dokumenty Mozilli:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
źródło
W Chrome 52:
Po prostu nie lubię przecinków. Ludzie zwykle używają ich w projektach Open Source, aby uniknąć wymazania linii napisanej przez innego komisarza. Zobacz to samo pytanie w Pythonie: https://stackoverflow.com/a/11597911/968988
źródło
[1,]
: przed przecinkiem jest coś oczywistego. Ale w[,]
przecinku jest tyle samo przecinka. Ponieważ nie rozumiem[,]
sam, nie sądzę, aby używanie[1,]
było dobrym pomysłem.