Выбрать главу

i = j = 1;

k = 2;

if (і == j)

  if (j == k)

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

else

  console.log(”i не равно j”); // НЕПРАВИЛЬНО!!

В этом примере внутренняя инструкция if является единственной инструкцией, вложенной во внешнюю инструкцию if. К сожалению, неясно (если исключить подсказку, которую дают отступы), к какой инструкции if относится блок else. А отступы в этом примере выставлены неправильно, потому что в действительности интерпретатор JavaScript интерпретирует предыдущий пример так:

if (і == j) {

  if (j == k)

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

  else

    console.log('i не равно j"); // Вот как!

}

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

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 предпочтительнее и понятнее записи в синтаксически эквивалентной форме, полностью показывающей вложенность инструкций: