Проход по массиву и for...in




Операторы цикла for иfor- in

Циклы

Циклы—это особые выражения, позволяющие выполнить один и тот же блок коданесколько раз. Выполнение кода прерывается по наступлению некоего условия.

Цикл со счетчиком(for)

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

Цикл со счетчиком записывается так:

for

(<выражение инициализации>;<условие>;<приращение>)

<тело цикла>

Здесь используется ключевое слово for

Поэтому такие циклы часто называют"циклами for".

Выражение инициализации

выполняется самым первым и всего один раз. Оно присваивает особой переменной, называемой счетчиком цикла, некое начальное значение (обычно 1). Счетчик цикла подсчитывает, сколько раз было выполнено тело цикла—собственно код, который нужно выполнить определенное количество раз.

Следующий шаг—проверка условия. Оно определяет момент, когда выполнение

цикла прервется и начнет выполняться следующий за ним код. Как правило, условиесравнивает значение счетчика цикла с его граничным значением. Если условиевозвращает true, выполняется тело цикла

, в противном случае цикл завершается и начинается выполнение кода, следующего за циклом.

После прохода тела циклавыполняется выражение приращения, изменяющее значение счетчика. Это выражение обычно инкрементирует счетчик (увеличивает его значение на единицу). Далее снова проверяется условие, выполняется тело цикла, приращение

ит.д., пока условиене станет равно false.

Пример цикла со счетчиком:

for (i = 1; i < 11; i++) {

a += 3;

b = i * 2 + 1;

}

Этот цикл будет выполнен 10 раз. Мы присваиваем счетчику

i

начальное значение1 и после каждого выполнения тела цикла увеличиваем его на единицу. Цикл перестанет выполняться, когда значение счетчика увеличится до 11, и условие цикла станет ложным.

Счетчик цикла можно записать в одном из выражений тела цикла, как это сделали

мы. В нашем случае счетчик iбудет содержать последовательно возрастающие значения от 1 до 10, которые используются в вычислениях.

Приведем еще два примера цикла со счетчиком:

for (i = 10; i > 0; i--) {

a += 3;

b = i * 2 + 1;

}

Здесь значение счетчика декрементируется. Начальное его значение равно 10. Цикл выполнится 10 раз и завершится, когда счетчик

iбудет содержать 0; при этомзначения последнего будут последовательно уменьшаться от 10 до 1.

for (i = 2; i < 21; i += 2) b = i * 2 + 1;

А в этом примере начальное значение счетчика равно 2, а конечное—21, но цикл выполнится, опять же, 10 раз. А все потому, что значение счетчика увеличивается на 2 и последовательно принимает значения 2, 4, 6... 20.

Цикл for-in

Для перебора объекта используется так называемый цикл for-in.

Цикл for...in проходит через перечисляемые свойства объекта в том порядке, в котором они были добавлены. Он пройдёт по каждому отдельному элементу.

Синтаксис

for (variable in object) { ... }

variable

Другое имя свойства назначается переменной на каждой итерации.

object

Объект, по чьим свойствам мы проходим

Описание

Цикл for...in проходит только по перечисляемым свойствам. Объекты, созданные встроенными конструкторами, такими как Array и Object имеют неперечисляемые свойства от Object.prototype и String.prototype, например, от String-это indexOf(), а от Object - метод toString(). Цикл пройдёт по всем перечисляемым свойствам объекта, а также тем, что он унаследует от конструктора прототипа (свойства объекта в цепи прототипа).

Удаление, добавление и модификация свойств

Цикл for...in проходит по свойствам в произвольном порядке (см. оператор delete для того, чтобы узнать почему порядок прохода может отличаться в зависимости от браузера). Если свойство изменяется за одну итерацию, а затем изменяется снова, его значением в цикле является его последнее значение. Свойство, удаленное до того, как до него дошёл цикл, не будет участвовать в нём. Свойства добавленные в объекты в цикле могут быть пропущены. В общем, лучше не добавлять, изменять или удалять свойство из объекта во время итерации, если по нему ещё не прошли. Нет гарантии, что добавленное свойство будет посещено циклом, изменное после проведения изменений, а удалённое после удаления.

Проход по массиву и for...in

Замечание: for...in не следует использовать для Array, где важен порядок индексов.

Индексы массива перечисляемые свойства с целочисленными именами, а в остальном аналогичны объектам. Нет гарантии, что for...in будет возвращать индексы в нужном порядке и вернёт все перичисляемые свойства, включая имеющие нецелочислиненные имена и наследуемые.

Поэтому порядок прохода зависит от реализации, проход по массиву может не произойти в правильном порядке. Следовательно лучше с числовыми индексами использовать циклы for, Array.prototype.forEach() или for...of, когда проходим по массивам, где важен порядок доступа к свойствам.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: