Современные браузеры и среды, такие как Node.js, позволяют вам сказать {a: 1, b: 2,} или [1,2,3,]. Это исторически было проблематично с Internet Explorer. Это исправлено в Internet Explorer 9?
Запускает ли Internet Explorer 9 дополнительные запятые в конце массива и литералов объектов?
Ответ 1
Есть два разных ответа на этот вопрос: один для зависающих запятых в инициализаторах объектов и один для зависающих запятых в инициализаторах массива:
Для инициализаторов объектов, например:
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 пошел в одну сторону, и все остальные пошли другим.: -)
Ответ 2
Этот документ утверждает, что он/будет исправлен: 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
В нем нет конкретных упоминаний об объектах. Просто массивы.
EDIT: Дополнительная информация. Из этого документа в формате PDF:
http://download.microsoft.com/download/8/4/2/8427CF1B-08B3-4557-952D-102E7A8FA64C/[MS-ES3].pdf
... dowloaded с этой страницы: http://msdn.microsoft.com/en-us/library/ff520996(VS.85).aspx
JScript 5.8 поддерживает появление одной конечной запятой в качестве последнего элемента в ObjectLiteral. JScript 5.7 не поддерживает это расширение.