Являются ли конечные запятые стандартными в JavaScript, или большинство браузеров, таких как Chrome и Firefox, просто допускают их?
Я думал, что они были стандартными, но IE8 вырвался после столкновения с ним - конечно, IE, не поддерживающий что-то, вряд ли означает, что это не стандарт.
Вот пример того, что я имею в виду (после последнего элемента массива books):
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
Адам Рэкис
источник
источник
Ответы:
Спецификации: ECMAScript 5 и ECMAScript 3
Раздел 11.1.5 в спецификации ECMAScript 5:
Так что да, это часть спецификации.
Обновление: видимо, это новое в ES5. В ES3 (стр. 41) определение было просто:
Для литералов массивов ( раздел 11.1.4 ) это еще более интересно ( обновление: это уже существовало в ES3):
(где
Elision_opt
Elision opt , что означает, что Elision является необязательным)Elision
определяется какТаким образом, массив буквального типа
совершенно законно. Это создает массив с двумя элементами, но устанавливает длину массива в
2 + 3 = 5
.Не ожидайте слишком многого от IE (до IE9) ...
источник
Просто быстрое напоминание / предупреждение, что это одна из областей, в которой стандарт JavaScript / ECMAScript и стандарт JSON отличаются; конечные запятые действительны в JS, но недопустимы в JSON.
источник
Что еще смешнее, IE7 дает
пока Firefox и Chrome
источник
[1,,].length
дает2
. Смысл : браузеры не делают ни одного.Вы можете найти спецификацию для javascript (он же ECMA Script) здесь . Соответствующее определение для массивов вы можете найти на странице 63, и, как заметил Феликс, определение объекта пару страниц позже на странице 65.
Хотя эта спецификация говорит, что хорошо иметь трейлинг,
,
я не знаю, будет ли это правдой, оглядываясь назад на несколько версий. Как вы уже заметили, IE8 будет самодовольным, если оставить запятую, но Chrome и FF справятся с этим.источник
Давайте разберемся с этим.
Да. Начиная со спецификации ECMAScript 5 (также является частью руководства по стилям Google и Airbnb)
Это вопрос поддержки ECMAScript 5.
Транспортеры, такие как Babel, удалят дополнительную запятую в переносимом коде, что означает, что вам не нужно беспокоиться о проблеме запятой в устаревших браузерах.
Так что это означает:
Так что, скорее всего, если вы используете ES5 и выше, вам не нужно об этом беспокоиться.
Опять же, это вопрос поддержки ECMAScript 5. IE8 не поддерживает ECMAScript 5 (только IE9 и выше)
Я очень рекомендую взглянуть на устаревшую документацию ES5 Airbnb https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas
Я также рекомендовал бы документы Mozilla:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
источник
На Chrome 52:
Мне просто не нравятся запятые. Люди обычно используют их в проектах с открытым исходным кодом, чтобы избежать стирания строки, написанной другим коммиттером. Смотрите тот же вопрос в Python: https://stackoverflow.com/a/11597911/968988
источник
[1,]
перед запятой. Но[,]
там до и после запятой столько же. Так как я не понимаю в[,]
одиночку, я не думаю, что использование[1,]
это хорошая идея.