Условное ветвление: если, ‘?’

Иногда нам нужно выполнить действия в зависимости от условий.

Для этого мы можем использовать инструкцию if и условный оператор ? , который также называют оператором «вопросительный знак».

Инструкция «if»

Инструкция if (...) вычисляет условие в скобках и, если результат true , то выполнение блок кода

:

  let year = prompt ('В  в каком году была опубликована спецификация ECMAScript-2015? ',' '); if (year == 2015) alert (' Вы правы! ');  

В примере выше — это простая проверка на равенство ( год == 2015 ), но оно может быть и гораздо более сложным.

Если мы выполнить одну инструкцию, то нужно заключить блок кода в фигурные скобки:

  if (year  == 2015) {alert ("Правильно!");  alert ("Вы такой умный!");}  

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

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

Инструкция if (…) вычисляет выражение в скобках и преобразует результат к логическому типу.

Давайте вспомним правила преобразования типов из глав Преобразование типов:

  • Число 0 , пустая строка "" , null , undefined и NaN становятся false . Из-за этого их называют «ложными» («ложными») значениями.
  • Остальные значения становятся true , поэтому их называют «правдивыми» («правдивыми») .

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

  if (0) {//0 ложно ...}  

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

  if (1) {//1 истинно ...}  

Мы также можем заранее определить вычисленное в логическом значении в if , например так:

  let condition = (year == 2015); //преобразуется к true или falseif (condition) {...}  

Блок «else»

Инструкция if может содержать необязательный блок «else» («иначе»). Он выполняется, когда условие ложно.

Например:

  let year = prompt ('В каком году была опубликована спецификация ECMAScript-2015?', ''); if (year == 2015) {alert ('  Да вы знаток! ');} Else {alert (' А вот и неправильно! '); //любое значение, кроме 2015}  

Несколько условий: «else if»

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

:

  let year = prompt ('В каком году была опубликована спецификация ECMAScript-2015?'  , ''); if (год  2015) {alert ('Это поздновато');} else {alert ('Верно!'  );}  

В приведённом выше коде JavaScript сначала проверит год . Если это неверно, он переходит к следующему условию год> 2015 . Если оно тоже последнее ложно, тогда сработает alert .

Блоков else if может быть и больше. Присутствие блока else не является обязательным.

Условный оператор „?“

Иногда нам нужно определить переменную в зависимости от условий. /p>

Например:

  let accessAllowed; let age = prompt ('Сколько вам лет?', ''); if (age> 18) {accessAllowed = true;} else {accessAllowed  = false;} alert (accessAllowed);  

Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.

Оператор представлен знаком вопроса ? . Его также называют «тернарным», так как этот оператор, единственный в своём роде, имеет три аргумента.

Синтаксис:

  let result = условие?  1: значение2;  

Сначала вычисляется условие : если оно истинно, тогда возвращается значение1 , в противном случае — значение2 .

Например:

  разрешить accessAllowed = (age> 18)?  true: false;  

Технически, мы можем опустить круглые скобки вокруг age> 18 . Оператор вопросительного знака имеет низкий приоритет, поэтому он выполняется после сравнения > .

Этот пример будет делать то же самое, что и предыдущий:

  //оператор сравнения age> 18 выполняется первым в любом случае//(нет необходимости заключать его в скобки) let accessAllowed = age> 18?  true: false;  

Но скобки делают код более читабельным, поэтому мы рекомендуем их использовать.

На заметку:

В примере выше вы можете избежать использования оператора вопросительного знака ? , т.к. сравнение само по себе уже возвращает true/false :

 // то же самоеlet accessAllowed = age> 18;  

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

Последовательность оператора связи позволяет вернуть значение, которое зависит от более чем одного условия.

Например:

  пусть  age = prompt ('Возраст?', 18); let message = (age  

Поначалу может быть сложно, понять, что происходит. Но при ближайшем рассмотрении мы видим, что это обычная последовательная проверка:

  1. Первый знак вопроса проверяет age .
  2. Если верно — возвращает 'Здравствуй, малыш!' . В противном случае, проверяет выражение после двоеточия „»: «“, вычисляет возраст .
  3. Если это верно — возвращает 'Привет! '. В противном случае, проверяет выражение после следующего двоеточия „»: «“, вычисляет age .
  4. Если это верно — возвращает 'Здравствуйте ! '. В случае возврата, возвращает выражение после последнего двоеточия — 'Какой необычный возраст!' .

Вот как это выглядит при использовании if..else :

  if (age  

Нетрадиционное использование «?»

Иногда оператор «вопросительный знак» ? используется в замене if :

  let company = prompt ('Какая компания создала JavaScript?', ''); (company == 'Netscape')  ?  alert ('Верно!'): alert ('Неправильно. ');  

В зависимости от условий company ==' Netscape ', будет выполнено либо первая, либо вторая часть после ? .

Здесь мы не присваиваем результативный вариант. Вместо этого мы выполняем различный код в зависимости от условий.

Не рекомендуется использовать оператор вопросительного знака таким образом.

Несмотря на то , что такая запись короче, чем эквивалентная инструкция if , она менее читабельна.

Вот, для сравнения, тот же код, использующий if :

  let company = prompt ('Какая компания создала JavaScript?', ''); if (company == 'Netscape') {alert ('Верно!');} else {alert (  'Неправильно.');}  

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

Смысл оператора «вопросительный знак» ? — вернуть то или значение значения, в зависимости от условий. Пожалуйста, используйте его именно для этого. Когда вам нужно выполнить разные ветви кода — используйте if .

Оцените статью
Botgadget.ru
Добавить комментарий