Javascript количество элементов в массиве

Если элементы добавлялись в массив без пропусков, в порядке возрастания индекса (когда каждый элемент массива имеет индекс на единицу больше предыдущего), то с помощью свойства length можно узнать количество элементов в массиве. При добавлении новых элементов в массив, свойство length автоматически обновляется:

Свойство length в качестве значения содержит число, равное последнему (самому большому) используемому индексу + 1. Поэтому, если индексы элементам массива присваивать в произвольном порядке, свойство length не имеет смысла использовать для определения количества элементов:

Наиболее часто свойство length используется для перебора элементов массива в циклах:

С помощью свойства length можно укорачивать массив с конца, для этого свойству присваивается значение, меньшее чем длина массива:

Если конструктору Array в качестве аргумента передать только один числовой аргумент, то будет создан пустой массив, у которого значение свойства length равно переданному в конструктор числу:

Тоже самое можно сделать, создав массив с помощью литерала и явно присвоив свойству length значение:

Примечание: присваивание свойству length произвольного значения, не добавляет в массив новых элементов, а просто изменяет значение свойства. В этом можно убедиться на простом примере:

Так как свойство length в качестве значения содержит число, равное последнему (самому большому) используемому индексу + 1, его можно использовать в качестве индекса при добавлении новых элементов, вместо явного указания индекса:

Узнать количество элементов в массиве можно через свойство length .

Свойство length возвращает не количество элементов в массиве, а «последний индекс» + «1».

В коде выше видно, что свойство length возвращает число «16», хотя на самом деле элементов в массиве четыре.

1 Nate Rook [2016-09-10 03:27:00]

В спецификации ECMAScript array.length не определяется как количество элементов в массиве.

Свойство length экземпляра Array — это свойство данных, значение которого всегда численно больше, чем имя каждого настраиваемого собственного свойства, имя которого является индексом массива.

То есть, механизм Javascript может привести к тому, что array.length будет положительной бесконечностью во всех случаях, и он будет соответствовать стандарту.

Читайте также:  Преобразовать файл pdf в формат word

Принимая это во внимание, как мне подсчитывать элементы в массиве?

3 ответа

1 Решение Barmar [2016-09-10 03:37:00]

Это не единственная спецификация свойства length .

Спецификация абстрактной операции ArrayCreate(length, proto) говорит о том, что свойство length инициализируется параметром length .

И спецификация Array Exotic Objects объясняет, как она обновляется:

В частности, всякий раз, когда добавляется собственное свойство, имя которого является индексом массива, значение свойства length изменяется, если необходимо, на одно больше, чем числовое значение этого индекса массива

Другие манипуляции с массивами определяются в терминах этих операций, поэтому свойство length должно точно отражать индексы элементов массива.

Какие? Просто используйте array.length . Я уверен, что не существует реализации стандартов, которые задают длину массива положительной бесконечности.

Если по какой-то причине вы действительно хотите избежать использования array.length , просто используйте forEach .

0 Seb [2016-09-10 04:00:00]

Изменение свойства .length запрещено Chrome. Запустите это:

Так, к счастью, никакого риска здесь нет. For циклизации бесконечности. Вероятно, это закончится несколько раньше из-за некоторого конца памяти.

Но тем не менее, можно так же изменить length . Что произойдет, если мы сделаем это больше?

Таким образом, хотя большая длина может быть проверена с .forEach() меньший не может. Не рекомендуется .forEach() значение длины (потому что .forEach() и .shift() начинают "desynchronize"), но в вашем собственном коде это не должно произойти с вами. Я не думаю, что этот язык должен быть полностью пуленепробиваемым, и что это возможно. Реальность проверит его в конце с нарушением скрипта в браузере, и это может сильно ограничить программистов. Если бы у JavaScript был бы правильный массив, а не только массив, подобный объектам, это было бы предотвращено, но это то, что оно есть.

Читайте также:  Интересные игры на пк гонки

Ссылка на основную публикацию
Adblock
detector