Бывает нужно проверить несколько вариантов условия. Для этого используется блок else if .... Например:
var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');
if (year < 2011) {
alert('Это слишком рано..');
} else if (year > 2011) {
alert('Это поздновато..');
} else {
alert('Да, точно в этом году!');
}
В примере выше JavaScript сначала проверит первое условие, если оно ложно — перейдет ко второму — и так далее, до последнего else.
Важность: 2
Напишите код, который будет спрашивать: «Каково «официальное» название JavaScript?».
Если посетитель вводит «EcmaScript», то выводить «Верно!», если что-то другое — выводить «Не знаете? «EcmaScript»!».
Блок-схема:
Результат в действии: tutorial/intro/ifelse_task2.html
Решение
[Открыть задачу в новом окне]
Важность: 2
Напишите код, который получает значение prompt, а затем выводит alert:
1, если значение больше нуля,
-1, если значение меньше нуля,
0, если значение равно нулю.
Можно посмотреть в действии: tutorial/intro/if_sign.html
Решение
[Открыть задачу в новом окне]
Важность: 3
Напишите код, который будет спрашивать логин (prompt).
Если посетитель вводит «Админ», то спрашивать пароль, если нажал отмена (escape) — выводить «Вход отменён», если вводит что-то другое — «Я вас не знаю».
Пароль проверять так. Если введён пароль «Чёрный Властелин», то выводить «Добро пожаловать!», иначе — «Пароль неверен», при отмене — «Вход отменён».
Блок-схема:
Для решения используйте вложенные блоки if. Обращайте внимание на стиль и читаемость кода.
Результат в действии: tutorial/intro/ifelse_task.html
Решение
[Открыть задачу в новом окне]
Оператор вопросительный знак '?'
Иногда нужно в зависимости от условия присвоить переменную. Например:
var access;
var age = prompt('Сколько вам лет?', '');
if (age > 14) {
access = true;
} else {
access = false;
}
alert(access);
Оператор вопросительный знак '?' позволяет делать это короче и проще.
Он состоит из трех частей:
условие ? значение1 : значение2
Проверяется условие, затем если оно верно — возвращается значение1 , если неверно — значение2, например:
access = (age > 14) ? true : false;
Оператор '?' выполняется позже большинства других, в частности — позже сравнений, поэтому скобки можно не ставить:
access = age > 14 ? true : false;
.. Но когда скобки есть — код лучше читается. Так что рекомендуется их писать.
В данном случае можно было бы обойтись и без оператора '?', т.к. сравнение само по себе уже возвращает true/false:
access = age > 14;
«Тернарный оператор»
Вопросительный знак — единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два. Поэтому его называют «тернарный оператор».
Важность: 5
Перепишите if с использованием оператора '?':
if (a + b < 4) {
result = 'Мало';
} else {
result = 'Много';
}
Решение
[Открыть задачу в новом окне]
Несколько операторов '?'
Несколько операторов if..else можно заменить последовательностью операторов '?'. Например:
var a = prompt('a?', 1);
var res = (a == 1) ? 'значение1' :
(a == 2) ? 'значение2' :
(a > 2) ? 'значение3' :
'значение4';
alert(res);
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычный if..else!
Вопросительный знак проверяет сначала a == 1, если верно — возвращает значение1, если нет — идет проверять a == 2. Если это верно — возвращает значение2, иначе проверка a > 2 и значение3.. Наконец, если ничего не верно, то значение4.
Альтернативный вариант с if..else:
var res;
if (a == 1) {
res = 'значение1';
} else if (a == 2) {
res = 'значение2';
} else if (a > 2) {
res = 'значение3';
} else {
res = 'значение4';
}
Важность: 5
Перепишите if..else с использованием нескольких операторов '?'.
Для читаемости — оформляйте код в несколько строк.
var message;
if (login == 'Вася') {
message = 'Привет';
} else if (login == 'Директор') {
message = 'Здравствуйте';
} else if (login == '') {
message = 'Нет логина';
} else {
message = '';
}
Решение
[Открыть задачу в новом окне]
Нетрадиционное использование '?'
Иногда оператор вопросительный знак '?' используют как замену if:
var company = prompt('Какая компания создала JavaScript?', '');
(company == 'Netscape') ?
alert('Да, верно') : alert('Неправильно');
Работает это так: в зависимости от условия, будет выполнена либо первая, либо вторая часть после '?'.
Результат выполнения не присваивается в переменную, так что пропадёт (впрочем, alert ничего не возвращает).