Причуды Браузера JavaScript - массив. Длина

<div *ngFor="let dummy of ' '.repeat(20).split(''), let x = index">

Замените 20 на свою переменную

27
задан Community 23 May 2017 в 10:29
поделиться

6 ответов

Мне кажется, что поведение Firefox корректно. Каково значение 6-го значения в IE (извините, у меня нет удобным протестировать). С тех пор нет никакого фактического значения, если, я предполагаю, что это заполняет его чем-то как 'пустой указатель', который, конечно, кажется, не то, что Вы намеревались иметь, происходят, когда Вы создали массив.

В конце дня, хотя, это действительно не имеет значения, который "корректен", так как действительность - то, что или Вы нацелены только на один браузер, в этом случае можно проигнорировать то, что другие делают, или Вы нацелены на несколько браузеров, в этом случае, Ваш код должен работать над всеми ними. В этом случае очевидное решение никогда не состоит в том, чтобы включать повисшую запятую в инициализатор массива.

, Если у Вас есть проблемы при предотвращении его (например, по некоторым причинам Вы разработали (плохо, по моему скромному мнению) привычка к включению его) и другие проблемы как это, тогда что-то как JSLint мог бы помочь.

9
ответ дан John 28 November 2019 в 05:49
поделиться

Я был заинтригован так, я искал его в определении редактор ECMAScript 262 3 , который является основанием JavaScript 1.8. Соответствующее определение найдено в разделе 11.1.4 и к сожалению не очень четкое. Раздел явно указывает, что elisions (= пропуск) вначале или в середине не определяют элемент , но действительно способствуют полной длине .

нет никаких явных операторов об избыточных запятых в конце инициализатора, но пропуском я прихожу к заключению, что вышеупомянутый оператор подразумевает, что они делают не , способствуют полной длине, таким образом, я прихожу к заключению, что MSIE неправильный .

соответствующий абзац читает следующим образом:

Элементы массива могут игнорироваться вначале, середина или конец списка элемента. Каждый раз, когда запятой в списке элемента не предшествует Выражение присваивания (т.е. запятая вначале или после другой запятой), недостающий элемент массива способствует длине Массива и увеличивает индекс последующих элементов. Игнорируемые элементы массива не определяются.

7
ответ дан Konrad Rudolph 28 November 2019 в 05:49
поделиться

"3" для тех случаев, я обычно вставлял свои сценарии

if(!arrayList[arrayList.length -1]) arrayList.pop();

, Вы могли сделать служебную функцию из этого.

3
ответ дан Damien B 28 November 2019 в 05:49
поделиться

Прежде всего Konrad является правильным заключить спецификацию в кавычки, как, именно это определяет язык и отвечает на Ваш первый вопрос.

Для ответа на другие вопросы:

там какие-либо другие такие причуды браузера JavaScript, которых я должен опасаться?

, О, слишком многие для списка здесь! Попробуйте веб-сайт QuirksMode для хорошего места для нахождения почти всего известного.

, Как я избегаю ошибок, таких как они?

лучший способ состоит в том, чтобы использовать библиотека , который абстрагируют эти проблемы далеко для Вас так, чтобы можно было перейти к волнению по поводу логики приложения. Хотя немного тайный, я предпочитаю и рекомендую MochiKit.

2
ответ дан Community 28 November 2019 в 05:49
поделиться

, Какой из них корректен?

Opera также возвращается 5. Это означает, что IE превзойден численностью и принципы большинства до того, что необходимо ожидать.

1
ответ дан Shadow2531 28 November 2019 в 05:49
поделиться

@John: значение arrayList[5] выходит, чтобы быть 'неопределенным'.

Да, в объявлениях никогда не должно быть повисшей запятой. На самом деле я просто проходил чужой длинный длинный код JavaScript, который так или иначе не работал правильно в различном browers. Выпущенный, что повисшая запятая была преступником, который был случайно введен!:)

0
ответ дан Community 28 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: