Запускает ли Internet Explorer 9 дополнительные запятые в конце массива и литералов объектов?

Современные браузеры и среды, такие как Node.js, позволяют вам сказать {a: 1, b: 2,} или [1,2,3,]. Это исторически было проблематично с Internet Explorer. Это исправлено в 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 не поддерживает это расширение.