- •Лабораторная работа №15 (JavaScript) Теоретическая часть Символы
- •Чувствительность к регистру
- •Пробелы, переводы строк и символы управления форматом
- •Комментарии
- •Идентификаторы и зарезервированные слова
- •Типы данных
- •Простые типы данных Числа
- •Арифметические операции
- •Дата и время
- •Задание №1
- •Задание №2
- •Работа со строками
- •Логические значения
- •Значения null и undefined
- •Объявление переменных
- •Область видимости переменной
- •Оператор if/else
- •If (выражение)
- •If (выражение)
- •Оператор else if
- •Оператор switch
- •Тернарный оператор ?:
- •Цикл while
- •Цикл do/while
- •Цикл for
- •Цикл for/in
- •Оператор break
- •Оператор continue
- •Оператор return
- •Задание №3
- •Контрольные задания
- •Порядок выполнения лабораторной работы
- •Порядок защиты лабораторной работы
Цикл for/in
Цикл for/in использует ключевое слово for, но он в корне отличается от обычного цикла for. Цикл for/in имеет следующий синтаксис:
for (переменная in объект)
{
инструкция
}
В качестве переменной здесь обычно используется имя переменной, но точно так же можно использовать инструкцию var, объявляющую единственную переменную. Параметр объект - это выражение, возвращающее объект. И как обычно, инструкция - это инструкция или блок инструкций, образующих тело цикла.
Для обхода элементов массива естественно использовать обычный цикл for:
var arr = [1,2,3,4,5];
for (var i = 0; i < arr.length; i++)
{
// Присваивать индексы в массиве переменной i
console.log(arr[i]); // Вывести значение каждого элемента массива
}
Инструкция for/in так же естественно позволяет выполнить обход свойств объекта:
// Создадим новый объект
var obj = {name:'Alex', password:'12345' };
for (var i in obj)
{
// Вывести значение каждого свойства объекта
console.log(obj[i]);
}
Чтобы выполнить инструкцию for/in, интерпретатор JavaScript сначала вычисляет выражение объект. Если оно возвращает значение null или undefined, интерпретатор пропускает цикл и переходит к следующей инструкции. Если выражение возвращает простое значение, оно преобразуется в эквивалентный объект-обертку. В противном случае выражение возвращает объект. Затем интерпретатор выполняет по одной итерации цикла для каждого перечислимого свойства объекта. Перед каждой итерацией интерпретатор вычисляет значение выражения, сохраняет его в переменной и присваивает ему имя свойства (строковое значение).
Обратите внимание, что переменная в цикле for/in может быть любым выражением, возвращающим значение, которое можно использовать слева от оператора присваивания. Это выражение вычисляется в каждой итерации цикла, т.е. каждый раз оно может возвращать разные значения. Например, чтобы скопировать имена всех свойств объекта в массив, можно использовать следующий цикл:
var obj = {name:'Alex', password:'12345' };
var arr = [], i = 0;
for (arr[i++] in obj); // пустое тело цикла
console.log(arr); // ["name", "password"]
В действительности цикл for/in может совершать обход не по всем свойствам объекта, а только по перечислимым свойствам. Многочисленные встроенные методы, определяемые в базовом языке JavaScript, не являются перечислимыми. Например, все объекты имеют метод toString(), но цикл for/in не перечислит свойство toString. Кроме встроенных методов также не являются перечислимыми многие другие свойства встроенных объектов. При этом все свойства и методы, определяемые пользователем, являются перечислимыми. Унаследованные свойства, которые были определены пользователем, также перечисляются циклом for/in.
Если в теле цикла for/in удалить свойство, которое еще не было перечислено, это свойство перечислено не будет. Если в теле цикла создать новые свойства, то обычно такие свойстве не будут перечислены. (Однако некоторые реализации могут перечислять унаследованные свойства, добавленные в ходе выполнения цикла.)
Еще одной категорией операторов языка JavaScript являются операторы перехода. Как следует из названия, эти операторы заставляют интерпретатор JavaScript переходить в другое место в программном коде. Оператор break заставляет интерпретатор перейти в конец цикла или другой инструкции. Оператор continue заставляет интерпретатор пропустить оставшуюся часть тела цикла, перейти обратно в начало цикла и приступить к выполнению новой итерации. В языке JavaScript имеется возможность помечать инструкции именами, благодаря чему в операторах break и continue можно явно указывать, к какому циклу или к какой другой инструкции они относятся.
Оператор return заставляет интерпретатор перейти из вызванной функции обратно в точку ее вызова и вернуть значение вызова. Оператор throw возбуждает исключение и предназначен для работы в сочетании с операторами try/catch/finally, которые определяют блок программного кода для обработки исключения. Это достаточно сложная разновидность операторов перехода: при появлении исключения интерпретатор переходит к ближайшему объемлющему обработчику исключений, который может находиться в той же функции или выше, в стеке возвратов вызванной функции.
Подробнее все эти операторы перехода описываются в следующих подразделах.
