For(i in a) alert(i);
Цикл for/in не задает порядка, в котором свойства объекта присваиваются переменной. Нельзя заранее узнать, каким будет этот порядок, и в различных реализациях и версиях JavaScript поведение может быть разным. Если тело цикла for/in удалит свойство, которое еще не было перечислено, это свойство перечислено не будет. Если тело цикла определяет новые свойства, то будут или нет перечислены эти свойства, зависит от реализации.
Цикл for/in на самом деле не перебирает все свойства всех объектов. Так же как некоторые свойства объектов помечаются как доступные только для чтения или постоянные (не удаляемые), свойства могут помечаться как неперечислимые.
Такие свойства не перечисляются циклом for/in. Если все свойства, определенные пользователем, перечисляются, то многие встроенные свойства, включая все встроенные методы, не перечисляются. Как мы увидим далее, объекты могут наследовать свойства от других объектов. Унаследованные свойства, которые определены пользователем, также перечисляются циклом for/in.
Метки
Метки case: и default: в сочетании с инструкцией switch – это особый вариант более общего случая. Любая инструкция может быть помечена указанным перед ней именем идентификатора и двоеточием:
Идентификатор: инструкция
Здесь идентификатор может быть любым допустимым в JavaScript идентификатором, не являющимся зарезервированным словом. Имена меток отделены от имен переменных и функций, поэтому программист не должен беспокоиться о конфликте имен, если имя метки совпадает с именем переменной или функции.
Пример инструкции while с меткой:
parser:
while(token != null) {
// здесь код опущен
}
Пометив инструкцию, мы даем ей имя, по которому на нее можно ссылаться из любого места программы. Пометить можно любую инструкцию, хотя обычно помечаются только циклы while, do/while, for и for/in. Дав циклу имя, можно посредством инструкций break и continue выходить из цикла или из отдельной итерации цикла.
Инструкция break
Инструкция break приводит к немедленному выходу из самого внутреннего цикла или инструкции switch. Синтаксис ее прост:
Break;
Инструкция break приводит к выходу из цикла или инструкции switch, поэтому такая форма break допустима только внутри этих инструкций.
JavaScript допускает указание имени метки за ключевым словом break:
break: имя_метки;
Обратите внимание: имя_метки – это просто идентификатор; за ним не указывается двоеточие, как в случае определения метки инструкции.
Когда break используется с меткой, происходит переход в конец именованной инструкции или прекращение ее выполнения; именованной инструкцией может быть любая инструкция, внешняя по отношению к break. Именованная инструкция не обязана быть циклом или инструкцией switch; инструкция break, использованная с меткой, даже не обязана находиться внутри цикла или инструкции switch. Единственное ограничение на метку, указанную в инструкции break, - она должна быть именем внешней по отношению к break инструкции. Метка может быть, например, именем инструкции if или даже блока инструкций, заключенных в фигурные скобки только для присвоения метки этому блоку.
Между ключевым словом break и именем метки перевод строки не допускается. Дело в том, что интерпретатор JavaScript автоматически вставляет пропущенные точки с запятой. Если разбить строку кода между ключевым словом break и следующей за ним меткой, интерпретатор предположит, что имелась в виду простая форма этой инструкции без метки, и добавит точку с запятой.
Следующий фрагмент выполняет поиск определенного значения среди элементов массива. Цикл прерывается естественным образом, когда доходит до конца массива; если искомое значение найдено, он прерывается с помощью инструкции break:
for(i = 0; i < a.length; i++) {
if (a[i] == target)
Break;
}
Форма инструкции break с меткой требуется только во вложенных циклах или в инструкции switch при необходимости выйти из инструкции, не являющейся самой внутренней.
Следующий пример показывает помеченные циклы for и инструкции break с метками. Проверьте, удастся ли вам понять, каким будет результат работы этого фрагмента:
outerloop:
for(var i = 0; i < 10; i++) {
innerloop:
for(var j = 0; j < 10; j++) {
if (j > 3) break; // Выход из самого внутреннего цикла
if (i == 2) break innerloop; // То же самое
if (i == 4) break outerloop; // Выход из внешнего цикла
document.write("i = " + i + " j = " + j + "<br>");
} }
document.write("FINAL i = " + i + " j = " + j + "<br>");
Дата добавления: 2016-01-09; просмотров: 659;