Современные браузеры и среды, такие как Node.js, позволяют произносить {a: 1, b: 2,} или [1,2,3,]. Это исторически было проблемой для Internet Explorer. Это исправлено в Internet Explorer 9?
Internet Explorer 9 подавляется лишними запятыми в конце литералов массива и объекта?
Ответы (2)
На этот вопрос есть два разных ответа: один для висящих запятых в инициализаторах объектов и один для висящих запятых в инициализаторах массивов:
Для инициализаторов объектов, например:
var obj = {
a: 1,
b: 2,
c: 3,
};
Это исправлено в IE8 и более поздних версиях. Проверьте это здесь: http://jsbin.com/UXuHopeC/1 (источник). IE7 и более ранние версии будут выдавать синтаксическую ошибку на }
после запятой.
Для инициализаторов массивов, например:
var arr = [
1,
2,
3,
];
Это было «исправлено» в IE9 и выше. Проверьте это здесь: http://jsbin.com/UXuHopeC/2 (источник). IE8 и более ранние версии предоставят этому массиву четыре записи, последняя из которых имеет значение undefined
. IE9 и выше дают ему три записи.
Я заключил «фиксированное» в кавычки, потому что в спецификации изначально не было ясно, должен ли массив иметь последнюю undefined
запись или нет, поэтому оба поведения не были неправильными. Просто IE пошли одним путем, а все остальные пошли другим. :-)
IE 9 Update 9.0.30
из-за конечной запятой в литерале объекта. Бью себя по голове за то, что решил оставить это там, поскольку мы больше не поддерживаем IE 8 и ниже.
- person Juan Mendes; 06.01.2015
IE 9 Update 9.0.23
все нормально, но в IE 9 Update 9.0.30
нет ошибок, вероятно, это регресс, который был исправлен почти сразу. Я пытаюсь достать эту конкретную версию, чтобы доказать это, но отчет выглядит так, как будто заказчик действительно проявил должную осмотрительность.
- person Juan Mendes; 06.01.2015
var a = [1,];
, это отличается от my_func([1,]);
?
- person Nick T; 28.10.2015
В этом документе утверждается, что он исправлен / будет исправлен: http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx
Исправленные проблемы
Завершающие запятые в литералах массива добавляются к длине массива.
Пример
var len = [1,2,3,].length;
alert(len); //should be 3, IE8 says 4
Здесь не упоминаются объекты. Просто массивы.
РЕДАКТИРОВАТЬ: дополнительная информация. Из этого PDF-документа:
http://download.microsoft.com/download/8/4/2/8427CF1B-08B3-4557-952D-102E7A8FA64C/%5BMS-ES3%5D.pdf
... скачано с этой страницы: http://msdn.microsoft.com/en-us/library/ff520996(VS.85).aspx
JScript 5.8 поддерживает использование одной конечной запятой в качестве последнего элемента в ObjectLiteral. JScript 5.7 не поддерживает это расширение.
,
? - person alex   schedule 18.02.2011[ {{ for_each elem in list }} {{elem}}, {{end}}]
. Синтаксис придуман. - person Alexander Suraphel   schedule 03.07.2017