Вступление
Условные операторы являются одними из самых полезных и общих функций всех языков программирования. “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.