Подтвердить что ты не робот

JavaScript: Может ли запятая произойти после последнего набора значений в массиве?

Мне интересно, действительно ли запятая, завершающая массив в javascript?

var settings = {
    'foo'  : oof,
    'bar' : rab,
};

против

var settings = {
    'foo'  : oof,
    'bar' : rab
};

Обратите внимание, что второй пример не имеет запятой после последнего ключа/значения.

4b9b3361

Ответ 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