Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

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).

5.5.4. Инструкция for/in

Инструкция цикла

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, в этом случае могут возбуждать исключение
ТуреЕггог
.) Если выражение возвращает простое значение, оно преобразуется в эквивалентный объект-обертку (раздел 3.6). В противном случае выражение возвращает объект. Затем интерпретатор выполняет по одной итерации цикла для каждого перечислимого свойства объекта. Перед каждой итерацией интерпретатор вычисляет значение выражения переменная и присваивает ему имя свойства (строковое значение).

6

Реализации, следующие стандарту ECMAScript 3, в этом случае могут возбуждать исключение ТуреЕrror.

Обратите внимание, что переменная в цикле

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

var о = {х:1. у:2. z:3};

var а = [];

var і = 0;

for(a[i++] in о) /* пустое тело цикла */;

Массивы в JavaScript - это просто специальный тип объектов, а индексы в массиве - свойства объекта, обход которых можно выполнить с помощью цикла

for/in
. Например, следующая инструкция перечислит индексы 0, 1 и 2 массива, объявленного выше:

fоr(і in a) console.log(i);

В действительности цикл

for/in
может совершать обход не по всем свойствам объекта, а только по перечислимым свойствам (раздел 6.7). Многочисленные встроенные методы, определяемые в базовом языке JavaScript, не являются перечислимыми. Например, все объекты имеют метод
toString
, но цикл
for/in
не перечислит свойство
toString
. Кроме встроенных методов также не являются перечислимыми многие другие свойства встроенных объектов. При этом все свойства и методы, определяемые пользователем, являются перечислимыми. (Но в реализации, следующей стандарту ECMAScript 5, имеется возможность сделать их неперечислимыми, использовав прием, описанный в разделе 6.7.) Унаследованные свойства, которые были определены пользователем (раздел 6.2.2), также перечисляются циклом for/in.

  • Читать дальше
  • 1
  • ...
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: