<div *ngFor="let dummy of ' '.repeat(20).split(''), let x = index">
Замените 20
на свою переменную
Мне кажется, что поведение Firefox корректно. Каково значение 6-го значения в IE (извините, у меня нет удобным протестировать). С тех пор нет никакого фактического значения, если, я предполагаю, что это заполняет его чем-то как 'пустой указатель', который, конечно, кажется, не то, что Вы намеревались иметь, происходят, когда Вы создали массив.
В конце дня, хотя, это действительно не имеет значения, который "корректен", так как действительность - то, что или Вы нацелены только на один браузер, в этом случае можно проигнорировать то, что другие делают, или Вы нацелены на несколько браузеров, в этом случае, Ваш код должен работать над всеми ними. В этом случае очевидное решение никогда не состоит в том, чтобы включать повисшую запятую в инициализатор массива.
, Если у Вас есть проблемы при предотвращении его (например, по некоторым причинам Вы разработали (плохо, по моему скромному мнению) привычка к включению его) и другие проблемы как это, тогда что-то как JSLint мог бы помочь.
Я был заинтригован так, я искал его в определении редактор ECMAScript 262 3 , который является основанием JavaScript 1.8. Соответствующее определение найдено в разделе 11.1.4 и к сожалению не очень четкое. Раздел явно указывает, что elisions (= пропуск) вначале или в середине не определяют элемент , но действительно способствуют полной длине .
нет никаких явных операторов об избыточных запятых в конце инициализатора, но пропуском я прихожу к заключению, что вышеупомянутый оператор подразумевает, что они делают не , способствуют полной длине, таким образом, я прихожу к заключению, что MSIE неправильный .
соответствующий абзац читает следующим образом:
Элементы массива могут игнорироваться вначале, середина или конец списка элемента. Каждый раз, когда запятой в списке элемента не предшествует Выражение присваивания (т.е. запятая вначале или после другой запятой), недостающий элемент массива способствует длине Массива и увеличивает индекс последующих элементов. Игнорируемые элементы массива не определяются.
"3" для тех случаев, я обычно вставлял свои сценарии
if(!arrayList[arrayList.length -1]) arrayList.pop();
, Вы могли сделать служебную функцию из этого.
Прежде всего Konrad является правильным заключить спецификацию в кавычки, как, именно это определяет язык и отвечает на Ваш первый вопрос.
Для ответа на другие вопросы:
там какие-либо другие такие причуды браузера JavaScript, которых я должен опасаться?
, О, слишком многие для списка здесь! Попробуйте веб-сайт QuirksMode для хорошего места для нахождения почти всего известного.
, Как я избегаю ошибок, таких как они?
лучший способ состоит в том, чтобы использовать библиотека , который абстрагируют эти проблемы далеко для Вас так, чтобы можно было перейти к волнению по поводу логики приложения. Хотя немного тайный, я предпочитаю и рекомендую MochiKit.
, Какой из них корректен?
Opera также возвращается 5. Это означает, что IE превзойден численностью и принципы большинства до того, что необходимо ожидать.
@John: значение arrayList[5] выходит, чтобы быть 'неопределенным'.
Да, в объявлениях никогда не должно быть повисшей запятой. На самом деле я просто проходил чужой длинный длинный код JavaScript, который так или иначе не работал правильно в различном browers. Выпущенный, что повисшая запятая была преступником, который был случайно введен!:)