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

ЖАНРЫ

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

if (І == j) {

if (j == k) {

console.log('i равно k");

}

}

else

{ // Вот какая разница возникает из-за добавления фигурных скобок!

console.log('i не равно j");

}

Хотя этот стиль и не используется в данной книге, тем не менее многие программисты заключают тела инструкций

if
и
else
также других составных инструкций, таких как циклы
while
) в фигурные скобки, даже когда тело состоит только из одной инструкции. Последовательное применение этого правила поможет избежать неприятностей, подобных только что описанной.

5.4.2. Инструкция else if

Инструкция

if/else
вычисляет значение выражения и выполняет тот или иной фрагмент программного кода, а зависимости от результата. Но что если требуется выполнить один из многих фрагментов? Возможный способ сделать это состоит в применении инструкции
else if
. Формально она не является самостоятельной инструкцией JavaScript; это лишь распространенный стиль программирования, заключающийся в применении повторяющихся инструкций
if/else
:

if (n == 1) {

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

}

else if (n == 2) {

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

}

else if (n == 3) {

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

}

else {

// Если ни одна из предыдущих инструкций else не была выполнена, выполнить блок 4

}

В этом фрагменте нет ничего особенного. Это просто последовательность инструкций

if
, где каждая инструкция
if
является частью конструкции
else
предыдущей инструкции. Стиль else if предпочтительнее и понятнее записи в синтаксически эквивалентной форме, полностью показывающей вложенность инструкций:

if (n == 1) {

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

}

else {

if (n == 2) {

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

}

else {

if (n == 3) {

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

}

else {

// Если ни одна из предыдущих инструкций else // не была выполнена, выполнить блок 4

}

}

}

5.4.3. Инструкция switch

Инструкция

if
создает ветвление в потоке выполнения программы, а многопозиционное ветвление можно реализовать посредством нескольких инструкций
else if
. Однако это не всегда наилучшее решение, особенно если все ветви зависят от значения одного и того же выражения. В этом случае расточительно повторно вычислять значение одного и того же выражения в нескольких инструкциях
if
.

Инструкция

switch
предназначена именно для таких ситуаций. За ключевым словом
switch
следует выражение в скобках и блок кода в фигурных скобках:

switch(выражение) {

инструкции

}

Однако полный синтаксис инструкции

switch
более сложен, чем показано здесь. Различные места в блоке помечены ключевым словом
case
, за которым следует выражение и символ двоеточия. Ключевое слово
case
напоминает инструкцию с меткой за исключением того, что оно связывает инструкцию с выражением, а не с именем. Когда выполняется инструкция
switch
, она вычисляет значение выражения, а затем ищет метку
case
, соответствующую этому значению (соответствие определяется с помощью оператора идентичности
===
). Если метка найдена, выполняется блок кода, начиная с первой инструкции, следующей за меткой
case
. Если метка
case
с соответствующим значением не найдена, выполнение начинается с первой инструкции, следующей за специальной меткой
default:
. Если метка
default:
отсутствует, блок инструкции
switch
пропускается целиком.

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

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

Поделиться с друзьями: