инструкция
инкремент:
}
Другими словами, выражение инициализации вычисляется один раз перед началом цикла. Это выражение, как правило, является выражением с побочными эффектами (обычно присваиванием). В JavaScript также допускается, чтобы выражение инициализации было инструкцией объявления переменной var
, поэтому можно одновременно объявить и инициализировать счетчик цикла. Выражение проверки вычисляется перед каждой итерацией и определяет, будет ли выполняться тело цикла. Если результатом проверки является истинное значение, выполняется инструкция, являющаяся телом цикла. В конце цикла вычисляется выражение инкремент. Чтобы использование этого выражения имело смысл, оно должно быть выражением с побочными эффектами. Обычно это либо выражение присваивания, либо выражение, использующее оператор ++
или --.
Вывести числа от 0 до 9 можно также с помощью цикла for
, как показано ниже. В противовес эквивалентному циклу while
, показанному в предыдущем разделе:
for(var count = 0; count < 10; count++)
console.log(count);
Конечно, циклы могут быть значительно более сложными, чем в этих простых примерах, и иногда в каждой итерации цикла изменяется несколько переменных. Эта ситуация - единственный случай в JavaScript, когда часто применяется оператор «запятая» - он позволяет объединить несколько выражений инициализации и инкрементирования в одно выражение, подходящее для использования в цикле for:
var і, j
for(i =0, j = 10; і < 10; i++, j--)
sum += і * j;
Во всех наших примерах циклов, представленных до сих пор, переменная цикла содержала число. Это достаточно распространенная, но не обязательная практика. В следующем примере цикл for
используется для обхода связанного списка структур данных и получения последнего объекта в списке (например, первого объекта, который не имеет свойства next
):
function tail(о) { // Возвращает последний элемент в списке о
fоr(; о.next; о = о.next) /*пустое*/; // Выполнять обход, пока о.next
return о; // является истинным значением
}
Обратите внимание на отсутствие выражения инициализации в примере выше. Любое из трех выражений цикла for
может быть опущено, но две точки с запятой являются обязательными. Если опустить выражение проверки, цикл будет повторяться вечно, и форма записи for(;;)
является еще одним способом написать бесконечный цикл, подобно while(true).
Инструкция цикла for/in
использует ключевое слово for
, но она в корне отличается от инструкции обычного цикла for
. Цикл for/in
имеет следующий синтаксис:
for (переменная in объект)
инструкция
В качестве переменной здесь обычно используется имя переменной, но точно так же можно использовать любое выражение, возвращающее левостороннее выражение (раздел 4.7.3), или инструкцию var
, объявляющую единственную переменную, - практически все, что может находиться слева от оператора присваивания. Параметр объект - это выражение, возвращающее объект. И как обычно, инструкция - это инструкция или блок инструкций, образующих тело цикла.
Для обхода элементов массива естественно использовать обычный цикл for
:
for(var і = 0; і < a.length; і++) // Присваивать индексы в массиве переменной і
console.log(a[і]); // Вывести значение каждого элемента массива
Инструкция for/in так же естественно позволяет выполнить обход свойств объекта.
for(var р in о) // Присваивать имена свойств объекта о переменной р
console.log(o[p]); // Вывести значение каждого свойства
Чтобы выполнить инструкцию for/in
, интерпретатор JavaScript сначала вычисляет выражение объект. Если оно возвращает значение null
или undfefined
, интерпретатор пропускает цикл и переходит к следующей инструкции. [6] Реализации, следующие стандарту ECMAScript 3, в этом случае могут возбуждать исключение ТуреЕrror.
(Реализации, следующие стандарту ECMAScript 3, в этом случае могут возбуждать исключение ТуреЕггог
.) Если выражение возвращает простое значение, оно преобразуется в эквивалентный объект-обертку (раздел 3.6). В противном случае выражение возвращает объект. Затем интерпретатор выполняет по одной итерации цикла для каждого перечислимого свойства объекта. Перед каждой итерацией интерпретатор вычисляет значение выражения переменная и присваивает ему имя свойства (строковое значение).
Читать дальше
Конец ознакомительного отрывка
Купить книгу