Инструкция if – это базовая управляющая инструкция, позволяющая интер_ претатору JavaScript принимать решения или, точнее, исполнять инструкции в зависимости от условий. Инструкция имеет две формы. Первая:
if (выражение)
инструкция
В этой форме инструкции if сначала вычисляется выражение. Если полученный результат равен true или может быть преобразован в true, то исполняется инструк_ ция. Если выражение равноfalseили преобразуется вfalse, то инструкция не ис_полняется. Например:
if (username == null) // Если переменная username равна null или undefined, username = "John Doe"; // определяем ее
Аналогично:
// Если переменная username равна null, undefined, 0, "" или NaN, она
// преобразуется в false, и эта инструкция присвоит переменной новое значение. if (!username) username = "John Doe";
Несмотря на кажущуюся избыточность, скобки вокруг выражения являются обязательной частью синтаксиса инструкции if. Как было упомянуто в преды_ дущем разделе, мы всегда можем заменить одиночную инструкцию блоком ин_ струкций. Поэтому инструкция if может выглядеть так:
Отступы, присутствующие в этих примерах, не обязательны. Дополнительные пробелы и табуляции игнорируются в JavaScript, и поскольку мы ставили после каждой отдельной инструкции точку с запятой, эти примеры могли быть запи_ саны в одну строку. Оформление текста с использованием символов перевода строки и отступов, как это показано здесь, облегчает чтение и понимание кода.
Вторая форма инструкции if вводит конструкцию else, исполняемую в тех слу_ чаях, когда выражение равно false. Ее синтаксис:
if (выражение)
инструкция1
else
инструкция2
В этой форме инструкции сначала вычисляется выражение, и если оно равно true, то исполняется инструкция1, в противном случае исполняется инструкция2. Например:
При наличии вложенных инструкций if с блоками else требуется некоторая ос_ торожность – необходимо гарантировать, что else относится к соответствующей инструкции if. Рассмотрим следующие строки:
i = j = 1; k = 2;
if (i == j)
if (j == k)
document.write("i равно k");
else
document.write("i не равно j"); // НЕПРАВИЛЬНО!!
В этом примере внутренняя инструкция if является единственной инструкцией внешней инструкции if. К сожалению, не ясно (если исключить подсказку, ко_ торую дают отступы), к какой инструкции if относится блок else. А отступы в этом примере выставлены неправильно, ведь интерпретатор JavaScript реаль_ но интерпретирует предыдущий пример так:
if (i == j) { if (j == k)
document.write("i равно k");
else
document.write("i не равно j"); // OOPS!
}
Правило JavaScript (и большинства других языков программирования): конст_ рукция else является частью ближайшей к ней инструкции if. Чтобы сделать этот пример менее двусмысленным и более легким для чтения, понимания, со_ провождения и отладки, надо поставить фигурные скобки:
if (i == j) {
if (j == k) {
document.write("i равно k");
}
}
else { // Вот какая разница возникает из_за местоположения фигурных скобок! document.write("i не равно j");
}
Многие программисты заключают тело инструкций if и else (а также других со_ ставных инструкций, таких как циклы while) в фигурные скобки, даже когда те_ ло состоит только из одной инструкции. Последовательное применение этого правила поможет избежать неприятностей, подобных только что описанной.