Как использовать оператор Switch в JavaScript

Вступление

Условные операторы являются одними из самых полезных и общих функций всех языков программирования. “https://www.digitalocean.com/community/tutorials/how-to-write-conditional-statements-in-javascript[How To Write Conditional Statements in JavaScript]” describes how to use the if, else, and else if keywords to control the flow of a program based on different conditions, which in JavaScript are often the result of user input.

В дополнение кif...else в JavaScript есть функция, известная как операторswitch. switch - это тип условного оператора, который оценивает выражение для нескольких возможных случаев и выполняет один или несколько блоков кода на основе совпадения вариантов. Операторswitch тесно связан с условным оператором, содержащим множество блоковelse if, и их часто можно использовать как взаимозаменяемые.

В этом руководстве мы узнаем, как использовать операторswitch, а также как использовать связанные ключевые словаcase,break иdefault. Наконец, мы рассмотрим, как использовать несколько вариантов в оператореswitch.

переключатель

Операторswitch оценивает выражение и выполняет код в результате совпадения регистра. Поначалу это может показаться немного устрашающим, но основной синтаксис аналогичен синтаксису оператораif. Он всегда будет записан с помощьюswitch () {}, с круглыми скобками, содержащими выражение для проверки, и фигурными скобками, содержащими потенциальный код для выполнения.

Ниже приведен пример оператораswitch с двумя операторамиcase и резервным вариантом, известным какdefault.

switch (expression) {
    case x:
        // execute case x code block
        break;
    case y:
        // execute case y code block
        break;
    default:
        // execute default code block
}

Следуя логике кодового блока выше, это последовательность событий, которые будут иметь место.

  • Выражение оценивается

  • Первыеcase,x будут проверяться на соответствие выражению. Если он совпадает, код будет выполнен, а ключевое словоbreak завершит блокswitch.

  • Если он не совпадает,x будет пропущен, а случайy будет проверяться на соответствие выражению. Еслиy соответствует выражению, код выполнится и выйдет из блокаswitch.

  • Если ни один из случаев не подходит, блок кодаdefault будет запущен.

Давайте сделаем рабочий пример оператораswitch, следуя синтаксису выше. В этом блоке кода мы найдем текущий день недели с помощью методаnew Date() иgetDay(), чтобы напечатать число, соответствующее текущему дню. 1 означает понедельник, вплоть до7, что означает воскресенье. Начнем с настройки нашей переменной.

const day = new Date().getDay();

Используяswitch, мы будем отправлять сообщение на консоль каждый день недели. Программа будет запускаться в порядке сверху вниз в поисках совпадения, и как только оно будет найдено, командаbreak остановит блокswitch от продолжения оценки операторов.

week.js

// Set the current day of the week to a variable, with 1 being Monday and 7 being Sunday
const day = new Date().getDay();

switch (day) {
    case 1:
        console.log("Happy Monday!");
        break;
    case 2:
        console.log("It's Tuesday. You got this!");
        break;
    case 3:
        console.log("Hump day already!");
        break;
    case 4:
        console.log("Just one more day 'til the weekend!");
        break;
    case 5:
        console.log("Happy Friday!");
        break;
    case 6:
        console.log("Have a wonderful Saturday!");
        break;
    case 7:
        console.log("It's Sunday, time to relax!");
        break;
    default:
        console.log("Something went horribly wrong...");
}
Output'Just one more day 'til the weekend!'

Этот код был протестирован в четверг, что соответствует4, поэтому вывод консоли былJust one more day 'til the weekend!. В зависимости от того, в какой день недели вы тестируете код, ваш вывод будет другим. Мы включили блокdefault в конце для запуска в случае ошибки, чего в этом случае не должно происходить, так как в неделе всего 7 дней. Мы также могли бы, например, напечатать только результаты с понедельника по пятницу, а в блокеdefault могло быть такое же сообщение для выходных.

Если бы мы пропустили ключевое словоbreak в каждом операторе, ни один из других операторовcase не был бы оценен как истина, но программа продолжила бы проверку, пока не достигла конца. Чтобы сделать наши программы более быстрыми и эффективными, мы добавилиbreak.

Переключить диапазоны

Может быть случай, когда вам нужно будет оценить диапазон значений в блокеswitch, а не одно значение, как в нашем примере выше. Мы можем сделать это, установив для нашего выражения значениеtrue и выполнив операцию внутри каждого оператораcase.

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

  • Оценка 90 и выше составляетA

  • Оценка от 80 до 89 - этоB

  • Оценка от 70 до 79 - этоC

  • Оценка от 60 до 69 - этоD

  • Оценка 59 или ниже -F

Теперь мы можем записать это как операторswitch. Поскольку мы проверяем диапазон, мы будем выполнять операцию в каждомcase, чтобы проверить, оценивается ли каждое выражение какtrue, а затем выйдем из оператора, как только требования дляtrue будут выполнены. довольный.

grades.js

// Set the student's grade
const grade = 87;

switch (true) {
    // If score is 90 or greater
    case grade >= 90:
        console.log("A");
        break;
    // If score is 80 or greater
    case grade >= 80:
        console.log("B");
        break;
    // If score is 70 or greater
    case grade >= 70:
        console.log("C");
        break;
    // If score is 60 or greater
    case grade >= 60:
        console.log("D");
        break;
    // Anything 59 or below is failing
    default:
        console.log("F");
}
Output'B'

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

Как и в случае сelse if,switch оценивается сверху вниз, и будет принято первое истинное совпадение. Следовательно, даже если наша переменнаяgrade равна87 и, следовательно, оценивается какtrue для C и D, первое совпадение - B, которое будет выходным.

Несколько случаев

Вы можете встретить код, в котором несколькоcase+`s should have the same output. In order to accomplish this, you can use more than one `+case для каждого блока кода.

Чтобы проверить это, мы собираемся сделать небольшое приложение, соответствующее текущему месяцу и соответствующему сезону. Сначала мы воспользуемся методомnew Date(), чтобы найти число, соответствующее текущему месяцу, и применить его к переменнойmonth.

const month = new Date().getMonth();

Методnew Date().getMonth() выведет число от0 до11, где0 - январь, а11 - декабрь. На момент публикации месяц сентябрь, что будет соответствовать8.

Наше приложение выведет четыре сезона со следующими спецификациями для простоты:

  • Winter: январь, февраль и март

  • Spring: апрель, май и июнь

  • Summer: июль, август и сентябрь

  • Autumn: октябрь, ноябрь и декабрь

Ниже приведен наш код.

seasons.js

// Get number corresponding to the current month, with 0 being January and 11 being December
const month = new Date().getMonth();

switch (month) {
    // January, February, March
    case 0:
    case 1:
    case 2:
        console.log("Winter");
        break;
    // April, May, June
    case 3:
    case 4:
    case 5:
        console.log("Spring");
        break;
    // July, August, September
    case 6:
    case 7:
    case 8:
        console.log("Summer");
        break;
    // October, November, December
    case 9:
    case 10:
    case 11:
        console.log("Autumn");
        break;
    default:
        console.log("Something went wrong.");
}

Когда мы запустим код, мы получим выходные данные, идентифицирующие текущий сезон на основе приведенных выше спецификаций.

OutputSummer

Текущий месяц на момент публикации был8, что соответствовало одному из отчетовcase с выходом за сезон"Summer".

Заключение

В этой статье мы рассмотрели операторswitch, типconditonal statement, который оценивает выражение и выводит разные значения на основе результатов сопоставления. Мы рассмотрели операторыswitch, используя диапазон и несколько операторовcase.

Чтобы узнать больше оswitch, вы можете просмотреть его наMozilla Developer Network.