Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Работу инструкции

switch
сложно объяснить на словах, гораздо понятнее выглядит объяснение на примере. Следующая инструкция
switch
эквивалентна повторяющимся инструкциям
if/else
, показанным в предыдущем разделе:

switch(n) {

case 1: // Выполняется, если п === 1

// Выполнить блок 1.

break; // Здесь остановиться

case 2: // Выполняется, если п === 2

// Выполнить блок 2.

break; // Здесь остановиться

case 3: // Выполняется, если п === 3

// Выполнить блок 3.

break; // Здесь остановиться

default: // Если все остальное не подходит...

// Выполнить блок 4.

break; // Здесь остановиться

}

Обратите внимание на ключевое слово

break
в конце каждого блока
case
. Инструкция
break
, описываемая далее в этой главе, приводит к передаче управления в конец инструкции
switch
и продолжению выполнения инструкций, следующих далее. Конструкции
case
в инструкции
switch
задают только начальную точку выполняемого программного кода, но не задают никаких конечных точек. В случае отсутствия инструкций
break
инструкция
switch
начнет выполнение блока кода с меткой
case
, соответствующей значению выражения, и продолжит выполнение инструкций до тех пор, пока не дойдет до конца блока. В редких случаях это полезно для написания программного кода, который переходит от одной метки
case
к следующей, но в 99% случаев следует аккуратно завершать каждый блок
case
инструкцией
break
. (При использовании
switch
внутри функции вместо
break
можно использовать инструкцию
return
. Обе эти инструкции служат для завершения работы инструкции
switch
и предотвращения перехода к следующей метке case.)

Ниже приводится более практичный пример использования инструкции

switch
; он преобразует значение в строку способом, зависящим от типа значения:

// Преобразовать число в шестнадцатеричное целое

// Вернуть строку, заключенную в кавычки

// Любой другой тип преобразуется обычным способом

function convert(x) {

switch(typeof х) {

case ’number':

return x.toString(16);

case 'string':

return "" + x + "";

default:

return x.toStringO

}

}

Обратите внимание, что в двух предыдущих примерах за ключевыми словами

case
следовали числа или строковые литералы. Именно так инструкция
switch
чаще всего используется на практике, но стандарт ECMAScript позволяет указывать после
case
произвольные выражения.

Инструкция

switch
сначала вычисляет выражение после ключевого слова
switch
, а затем выражения
case
в том порядке, в котором они указаны, пока не будет найдено совпадающее значение. [4] Факт совпадения определяется с помощью оператора идентичности
===
, а не с помощью оператора равенства
==
, поэтому выражения должны совпадать без какого-либо преобразования типов.

4

Тот факт, что выражения в метках case вычисляются во время выполнения программы, существенно отличает инструкцию switch в языке JavaScript (и делает ее менее эффективной) от инструкции switch в С, C++ и Java. В этих языках выражения case должны быть константами, вычисляемыми на этапе компиляции, и иметь один тот же тип. Кроме того, инструкция switch в этих языках часто может быть реализована с использованием высокоэффективной таблицы переходов.

Поскольку при каждом выполнении инструкции

switch
вычисляются не все выражения
case
, следует избегать использования выражений
case
, имеющих побочные эффекты, такие как вызовы функций и присваивания. Безопаснее всего ограничиваться в выражениях
case
константными выражениями.

Как объяснялось ранее, если ни одно из выражений

case
не соответствует выражению
switch
, инструкция
switch
начинает выполнение с инструкции с меткой
default:
. Если метка
default:
отсутствует, тело инструкции
switch
полностью пропускается. Обратите внимание, что в предыдущих примерах метка
default:
указана в конце тела инструкции
switch
после всех меток
case
. Это логичное и обычное место для нее, но на самом деле она может располагаться в любом месте внутри инструкции
switch
.

5.5. Циклы

Чтобы понять действие условных инструкций, мы предлагали представить их в виде разветвлений на дороге, по которой двигается интерпретатор JavaScript. Инструкции циклов можно представить как разворот на дороге, возвращающий обратно, который заставляет интерпретатор многократно проходить через один и тот же участок программного кода. В языке JavaScript имеется четыре инструкции циклов:

while, do/while, for
и
for/in
. Каждому из них посвящен один из следующих подразделов. Одно из обычных применений инструкций циклов - обход элементов массива. Эта разновидность циклов подробно обсуждается в разделе 7.6, где также рассматриваются специальные методы итераций класса
Array
.

5.5.1. Инструкция while

Инструкция

if
является базовой условной инструкцией в языке JavaScript, а базовой инструкцией циклов для JavaScript можно считать инструкцию
while
. Она имеет следующий синтаксис:

while (выражение) инструкция

Инструкция

while
начинает работу с вычисления выражения. Если это выражение имеет ложное значение, интерпретатор пропускает инструкцию, составляющую тело цикла, и переходит к следующей инструкции в программе. Если выражение имеет истинное значение, то выполняется инструкция, образующая тело цикла, затем управление передается в начало цикла и выражение вычисляется снова. Иными словами, интерпретатор снова и снова выполняет инструкцию тела цикла, пока (
while
) значение выражения остается истинным. Обратите внимание, что имеется возможность организовать бесконечный цикл с помощью синтаксиса
while(true).

Обычно не требуется, чтобы интерпретатор JavaScript снова и снова выполнял одну и ту же операцию. Почти в каждом цикле с каждой итерацией цикла одна или несколько переменных изменяют свои значения. Поскольку переменная меняется, действия, которые выполняет инструкция, при каждом проходе тела цикла могут отличаться. Кроме того, если изменяемая переменная (или переменные) присутствует в выражении, значение выражения может меняться при каждом проходе цикла. Это важно, т. к. в противном случае выражение, значение которого было истинным, никогда не изменится и цикл никогда не завершится! Ниже приводится пример цикла

while
, который выводит числа от 0 до 9:

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

Мы – Гордые часть 8

Машуков Тимур
8. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мы – Гордые часть 8

На границе империй. Том 7. Часть 3

INDIGO
9. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.40
рейтинг книги
На границе империй. Том 7. Часть 3

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Размышления русского боксёра в токийской академии Тамагава, 2

Афанасьев Семён
2. Размышления русского боксёра в токийской академии
Фантастика:
альтернативная история
5.80
рейтинг книги
Размышления русского боксёра в токийской академии Тамагава, 2

Афганский рубеж 4

Дорин Михаил
4. Рубеж
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Афганский рубеж 4

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17

Дважды одаренный. Том III

Тарс Элиан
3. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
юмористическое фэнтези
5.00
рейтинг книги
Дважды одаренный. Том III

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

Последний Герой. Том 3

Дамиров Рафаэль
3. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 3

Герой

Мазин Александр Владимирович
4. Варяг
Фантастика:
альтернативная история
9.10
рейтинг книги
Герой

Наследник жаждет титул

Тарс Элиан
4. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник жаждет титул

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4