JavaScript: Может ли запятая произойти после последнего набора значений в массиве?
Мне интересно, действительно ли запятая, завершающая массив в javascript?
var settings = {
'foo' : oof,
'bar' : rab,
};
против
var settings = {
'foo' : oof,
'bar' : rab
};
Обратите внимание, что второй пример не имеет запятой после последнего ключа/значения.
Ответы
Ответ 1
Большинство браузеров и реализаций допускают конечную запятую, большая НО - это
"Internet Explorer".
Задняя запятая в большинстве версий InternetExplorer вызывает проблему БОЛЬШОЙ. Это бросит странные, сумасшедшие, странные и необоснованные ошибки. Вы не знаете, где вы находитесь! Это ужасно, вы попадете в глубокие и серьезные депрессии. У болезни также есть имя, "злая запятая обреченности", которую она называла однажды.
Заключение: НИКОГДА... никогда! используйте запятую в Javascript.
Ответ 2
Исторически сложилось так, что ES3 НЕ разрешал конечную запятую при определении литерала объекта. Это было единственное, что сделал IE, но большинство других производителей баузеров пошли против спецификации и все равно допустили ее. Так что технически это была ошибка в других браузерах, которые ее поддерживали. В ES3 параметр ObjectLiteral
был определен как
ObjectLiteral
{ }
{ PropertyNameAndValueList }
Позже ES5 разрешил эту проблему, перейдя с большинством и узаконив конечную запятую, поместив ее в спецификацию. Теперь ObjectLiteral
определяется как
ObjectLiteral
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
Обратите внимание на конечную запятую в конце.
Хотя конечная запятая определяется в литературе объекта, она по-прежнему не разрешена в JSON в соответствии с ES5. Таким образом, хотя следующий литерал объекта действителен,
{ foo: "bar", }
следующий JSON не является,
'{ "foo": "bar", }'
Грамматика для JSONObject есть,
JSONObject
{ }
{ JSONMemberList }
JSONMemberList
JSONMember
JSONMemberList , JSONMember
JSONMember
JSONString : JSONValue
Короче говоря, если вы не хотите беспокоиться о спецификациях или браузерах, тогда НЕ добавляйте конечную запятую.
Ответ 3
Что касается объектных литералов по крайней мере (заголовок вопроса упоминает массив, но пример - литерал объекта), это зависит от того, где работает ваш js. В ES5 действительны запятые в объектных литералах. Хотя конечные запятые могут вызвать проблемы в Интернете (в IE), большинство minifiers удалят их в любом случае.
http://www.2ality.com/2011/06/object-literal-comma.html
http://dontkry.com/posts/code/trailing-commas.html