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