Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Условные операторы: if, '?'

  1. Оператор if
  2. Преобразование к логическому типу
  3. Неверное условие, else
  4. Несколько условий, else if
  5. Оператор вопросительный знак '?'
  6. Несколько операторов '?'

Иногда, в зависимости от условия, нужно выполнить различные действия. Для этого используется оператор if.

Например:

var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');

if (year != 2011) alert('А вот и неправильно!');

Оператор if

Оператор if («если») получает условие, в примере выше это year != 2011. Он вычисляет его, и если результат - true, то выполняет команду.

Если нужно выполнить более одной команды - они оформляются блоком кода в фигурных скобках:

if (year != 2011) {
  alert('А вот и неправильно!');
  alert('В 2011 году!');
}

Рекомендуется использовать фигурные скобки всегда, даже когда команда одна. Это улучшает читаемость.

Можно выделить вычисление условия в отдельную переменную:

var cond = year != 2011; 

if (cond) {
  ...
}

Преобразование к логическому типу

Оператор if вычисляет и преобразует cond к логическому типу.

В логическом контексте число 0, пустая строка "", null и undefined, а также NaN(познакомимся с этим значением далее) являются false, остальные значения — true.

Например, такое условие никогда не выполнится:

if (0) { // 0 преобразуется к false
  ...
}

… А такое — выполнится всегда:

if (1) { // 1 преобразуется к true
  ...
}

Выведется ли alert?

if ("0") {
  alert('Привет');
}

Решение
Решение

Да, выведется, т.к. внутри if стоит строка "0".

Любая строка, кроме пустой (а здесь она не пустая), в логическом контексте является true.

Можно запустить и проверить:

if ("0") {
  alert('Привет');
}

Неверное условие, else

Необязательный блок else («иначе») выполняется, если условие неверно:

var year = prompt('Введите год ECMA-262 5.1', '');

if (year == 2011) {
  alert('Да вы знаток!');
} else {
  alert('А вот и неправильно!'); // любое значение, кроме 2011
}

Несколько условий, else if

Бывает нужно проверить несколько вариантов условия. Для этого используется блок else if .... Например:

var year = prompt('В каком году появилась спецификация ECMA-262 5.1?', '');

if (year < 2011) {
  alert('Это слишком рано..');
} else if (year > 2011) {
  alert('Это поздновато..');
} else {
  alert('Да, точно в этом году!');
}

В примере выше JavaScript сначала проверит первое условие, если оно ложно - перейдет ко второму - и так далее, до последнего else.

Напишите код, который получает значение prompt, а затем выводит alert:

  • 1, если значение больше нуля,
  • -1, если значение меньше нуля,
  • 0, если значение равно нулю.

Можно посмотреть в действии: tutorial/intro/if_sign.html

Решение

Напишите код, который будет спрашивать логин (prompt).

Если посетитель вводит «Черный Властелин», то спрашивать пароль, иначе выводить (alert) «Неправильный логин».

Если посетитель нажимает CANCEL(Escape), то выводить «Вход отменен».

Пароль проверять так. Если пароль - «Я Пришел», то выводить «пароль верный», иначе - «пароль неверен».

Для решения используйте вложенные блоки if.

Результат в действии: tutorial/intro/if_pass.html

Решение
Решение

Решение: tutorial/intro/if_pass.html.

Обратите внимание на дополнительные вертикальные отступы внутри if. Они полезны для лучшей читаемости кода.

Оператор вопросительный знак '?'

Иногда нужно в зависимости от условия присвоить переменную. Например:

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;

Тернарный оператор

Вопросительный знак - единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два.
Поэтому его называют тернарный оператор.

Перепишите if с использованием оператора '?':

if (a + b < 4) {
  result = 'Мало';
} else {
  result = 'Много';
}

Решение
Решение

result = (a + b < 4) ? 'Мало' : 'Много';

Несколько операторов '?'

Несколько операторов 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';
}

Перепишите if..else с использованием нескольких операторов '?'.

Для читаемости - оформляйте код в несколько строк.

if (login == 'Вася') {
  msg = 'Привет';
} else if (login == 'Директор') {
  msg = 'Здравствуйте';
} else if (login == '') {
  msg = 'Нет логина';
} else {
  msg = '';
}

Решение
Решение

msg = (login == 'Вася') ? 'Привет' :
  (login == 'Директор') ? 'Здравствуйте' :
  (login == '') ? 'Нет логина' :
  '';


Комментарии

  1. Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
  2. Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
  3. Комментарии без смысла, с рекламой или не о статье вообще - удаляются.
Наверх

Содержание

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!