switch
Инструкция switch сравнивает выражение со случаями, перечисленными внутри неё, а затем выполняет соответствующие инструкции.
Синтаксис
switch (expression) < case value1: //Здесь выполняются инструкции, если результат выражения равен value1 [break;] case value2: //Инструкции, соответствующие value2 [break;] . case valueN: //Инструкции, соответствующие значению valueN //statementsN [break;] default: //Здесь находятся инструкции, которые выполняются при отсутствии соответствующего значения //statements_def [break;] >
Выражение, значение которого сравнивается со всеми случаями.
Случай, который проверяется на соответствие выражению ( expression ).
Инструкции, которые выполняются, если expression соответствуют случаю.
Инструкции, выполняемые если expression не соответствует ни одному случаю.
Описание
Если выражение соответствует какому-то случаю, то выполняются инструкции этого случая. Если несколько случаев соответствуют значению, только первый случай будет использован.
Сначала программа пытается найти подходящий случай, значение которого равно значению искомого выражения (используется строгое сравнение (en-US) , ===) и затем выполняет инструкции, соответствующие случаю. Если подходящего случая нет, ищется случай по умолчанию ( default ), который не является обязательным. Если случая по умолчанию нет, выполнение продолжается на инструкции, следующей сразу после switch . По соглашению, случай default описывается последним, но это не является строгим правилом.
Опциональная инструкция break выполняет выход из блока switch . Она может располагаться в каждом из случаев, но не является обязательной. Если её нет, то выполняется следующая инструкция из блока switch .
Примеры
Пример: Использование switch
В этом примере, если expr равно «Bananas», программа находит случай «Bananas» и выполняет соответствующие инструкции. При выполнении инструкции break , выполнение продолжится за пределами switch . Если бы break не было, то выполнились бы инструкции случая «Cherries».
switch (expr) case "Oranges": console.log("Oranges are $0.59 a pound."); break; case "Apples": console.log("Apples are $0.32 a pound."); break; case "Bananas": console.log("Bananas are $0.48 a pound."); break; case "Cherries": console.log("Cherries are $3.00 a pound."); break; case "Mangoes": case "Papayas": console.log("Mangoes and papayas are $2.79 a pound."); break; default: console.log("Sorry, we are out of " + expr + "."); > console.log("Is there anything else you'd like?");
Пример: Что случится, если не использовать break?
Если вы не использовали инструкцию break , то будут выполнены инструкции следующего случая. И проверка на соответствие выражению не будет выполняться.
var foo = 0; switch (foo) case -1: console.log("negative 1"); break; case 0: // foo равно 0, случай соответствует выражению и эти инструкции будут выполнены console.log(0); // ПРИМЕЧАНИЕ: здесь могла находиться забытая инструкция break case 1: // В случае 'case 0:' не было break, инструкции данного случая также будут выполнены console.log(1); break; // В конце расположен break, поэтому выполнение не перейдёт к случаю 'case 2:' case 2: console.log(2); break; default: console.log("default"); >
Цепочки case
Одна операция
Этот метод использует тот факт, что после case нет прерывания и продолжится выполнение следующего case независимо от того, соответствует ли case предоставленному условию. Подробнее в примере «Что случится, если не использовать break?.
Это пример case с одной операцией, где четыре разных значения отрабатывают одинаково.
var Animal = "Giraffe"; switch (Animal) case "Cow": case "Giraffe": case "Dog": case "Pig": console.log("This animal is not extinct."); break; case "Dinosaur": default: console.log("This animal is extinct."); >
Цепочка операций
Это пример множественных операций внутри case , где в зависимости от предоставленного числа можно увидеть разный вывод. Здесь показывается, что операции отрабатывают в том порядке, в котором расположены case . При этом числовая последовательность может не соблюдаться. Также возможно примешать в case строки.
var foo = 1; var output = "Output: "; switch (foo) case 0: output += "So "; case 1: output += "What "; output += "Is "; case 2: output += "Your "; case 3: output += "Name"; case 4: output += "?"; console.log(output); break; case 5: output += "!"; console.log(output); break; default: console.log("Please pick a number from 0 to 5!"); >
Вывод этого примера:
Значение | Лог |
---|---|
foo is NaN or not 1 , 2 , 3 , 4 , 5 , or 0 | Please pick a number from 0 to 5! |
0 | Output: So What Is Your Name? |
1 | Output: What Is Your Name? |
2 | Output: Your Name? |
3 | Output: Name? |
4 | Output: ? |
5 | Output: ! |
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-switch-statement |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 7 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Упрощайте: как использовать конструкцию switch вместо if-else в JavaScript
Условный оператор switch сравнивает выражения с доступными значениями и выполняет один или несколько блоков кода.
Професійний курс від robotdreams: Алгоритми та структури даних.
Знаходьте нестандартні рішення у складних робочих задачах.
Другими словами, конструкция switch — это более удобная замена if и else . Этот оператор позволяет сделать код более коротким и понятным.
Он принимает множество значений, а после сравнивает выражения со значениями из инструкции case . Если выражение и значение case друг другу соответствуют, то инструкции будут выполнены.
Синтаксис switch
Конструкция switch состоит из:
-
описания с ключевым словом switch ;
Професійний курс від laba: Управління командою в бізнесі.
Створюйте ефективну робочу атмосферу.
Оператор всегда записывается в виде switch () <> , где:
() — круглые скобки, в которых записывается выражение для оценки;
<> — фигурные скобки, внутри которых находится код выполнения.
Давайте рассмотрим пример:
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 — останавливает выполнение блока.
В ситуации, когда выражение не соответствует условию, оператор переходит к выполнению условия case y . При соответствии выражения и условия break останавливает выполнение дальнейшего кода.
Інтенсівний курс від laba: Фінансовий директор.
Ефективне фінансове управління компанією.
Если выражение не соответствует условиям case x и case y — происходит выполнение блока default — он запускается в конце программы при наличии ошибки.
При пропущенном ключевом слове break операторы case не будут выдавать значение true , а программа продолжит проверять все условия.
Если инструкции break нет, то осуществляется переход к следующей инструкции switch . Отметим, что break используется для увеличения производительности программы.
Использование break
Рассмотрим пример, где значение а сравнивается со всеми вариантами case .
let a = 2 + 2; switch (a)
В case 3 совпадения нет, потому оператор приступает к выполнению case 4 . Найдено совпадение, а потому со строки alert( ‘В самый раз!’ ) будет выполнен код до следующего оператора break , который его остановит.
Без break
Что будет, если мы уберем break из нашего примера?
let a = 2 + 2; switch (a)
В этом случае выполнение осуществится по всем вариантам case . В примере будут выполнены все три alert :
alert( 'В самый раз!' ); alert( 'Много' ); alert( "Значений нет" );
Примеры со switch-case в JavaScript
Давайте для наглядности рассмотрим еще несколько примеров использования конструкции. Попробуйте прокомментировать их, и только потом читайте наше объяснение, договорились?
Несколько значений для одного случая
var foo = 1; switch (foo)
Если foo совпадает с одним из case — 0, 1, 2, 3, то будет выведено сообщение с текстом yes . Без инструкции break выполнение switch продолжится.
Что будет, если case записан в один ряд?
var x = 3; switch (x)
Варианты case можно располагать не в столбик, а в один ряд — выполнение кода от этого не изменится.
Ефективний курс від robotdreams: Blockchain-розробник.
Революційні рішення в технологіях.
Вычисление дня недели
switch (new Date().getDay())
День недели — это число от 0 до 6.
Воспользуемся методом getDay () : воскресенье — case 0 , понедельник — case 1 , вторник — case 2 и так далее. Этот метод вернет значение, которое будет соответствовать дню недели для даты, которую мы укажем.
В заключение
Конструкция switch-case чаще всего используется в случаях множественного выбора. Оператор switch может использоваться для обработки сразу нескольких выражений ( case ) или диапазонов.
Switch в переводе с английского языка — «переключатель», с его помощью можно выбирать блоки кода для выполнения в соответствии со значениями заданных выражений. Все значения — это варианты case .
JavaScript: switch
Инструкция switch была придумана в качестве альтернативы для нескольких if . Обычно она используется когда нужно сравнить некоторое значение сразу с несколькими различными вариантами (другими значениями) и выполнить соответствующий фрагмент кода из предложенных вариантов.
switch (выражение) < case выражение1: // Этот фрагмент кода выполнится, если вычисленное значение выражения в скобках // равно значению выражение1 break; . case выражениеN: // Этот фрагмент кода выполнится, если вычисленное значение выражения в скобках // равно значению выражениеN break; default: // Этот фрагмент кода выполнится при отсутствии // совпадений со значениями представленных вариантов >
В круглых скобках, после ключевого слова switch , указывается выражение, значение которого будет последовательно (сверху вниз) сравниваться со значениями выражений, указанных после ключевых слов case . При сравнении значений используется оператор === .
Если соответствие значений установлено – switch начинает выполняться от соответствующего case и далее, пока не встретится инструкция break (или до конца switch , если break отсутствует). Если соответствие значений не установлено – выполняется код, расположенный после ключевого слова default .
case и default называют вариантами switch .
Обратите внимание, что вариант default , не является обязательным. При этом его можно располагать в любом месте в теле switch , однако для удобства, его условились записывать последним.
Инструкция break выполняет немедленный выход из инструкции switch . Она может располагаться в каждом варианте, но не является обязательной. При отсутствии инструкции break в каком-либо варианте управление будет передано инструкциям, относящимся к следующему варианту.
Пример работы инструкции switch :
var x = 3; switch (x) < case 1: document.write("x равен 1"); break; case 2: document.write("x равен 2"); break; case 3: document.write("x равен 3"); break; default: document.write("x >3"); >
На изображении ниже показан порядок выполнения:
Пример без инструкции break :
var x = 2; switch (x)
Для выхода из switch может использоваться не только инструкция break , но также и инструкция return (если switch находится внутри функции) или continue (если switch находится внутри цикла).
Несколько вариантов можно ассоциировать с одним и тем же программным кодом:
var x = 3; switch (x)
Варианты case не обязательно должны записываться друг под другом, для удобства их можно расположить в ряд:
var x = 3; switch (x)
Возможность использовать выражения в case позволяет писать такой код:
var num = 30; switch (true) < case num == 0: document.write("num: " + num); break; case num >5 && num < 15: document.write("num между 5 и 15"); break; case num >20: document.write("num: " + num); break; >
С этой темой смотрят:
- if else
- Тернарный оператор
- Преобразование типов данных
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2023 © puzzleweb.ru | razumnikum.ru
Конструкция «switch»
Конструкция switch заменяет собой сразу несколько if .
Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.
Синтаксис
Конструкция switch имеет один или более блок case и необязательный блок default .
Выглядит она так:
switch(x) < case 'value1': // if (x === 'value1') . [break] case 'value2': // if (x === 'value2') . [break] default: . [break] >
- Переменная x проверяется на строгое равенство первому значению value1 , затем второму value2 и так далее.
- Если соответствие установлено – switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch ).
- Если ни один case не совпал – выполняется (если есть) вариант default .
Пример работы
Пример использования switch (сработавший код выделен):
let a = 2 + 2; switch (a)
Здесь оператор switch последовательно сравнит a со всеми вариантами из case .
Сначала 3 , затем – так как нет совпадения – 4 . Совпадение найдено, будет выполнен этот вариант, со строки alert( ‘В точку!’ ) и далее, до ближайшего break , который прервёт выполнение.
Если break нет, то выполнение пойдёт ниже по следующим case , при этом остальные проверки игнорируются.
Пример без break :
let a = 2 + 2; switch (a)
В примере выше последовательно выполнятся три alert :
alert( 'В точку!' ); alert( 'Перебор' ); alert( "Нет таких значений" );
Любое выражение может быть аргументом для switch/case
И switch и case допускают любое выражение в качестве аргумента.
let a = "1"; let b = 0; switch (+a)
В этом примере выражение +a вычисляется в 1 , что совпадает с выражением b + 1 в case , и следовательно, код в этом блоке будет выполнен.
Группировка «case»
Несколько вариантов case , использующих один код, можно группировать.
Для примера, выполним один и тот же код для case 3 и case 5 , сгруппировав их:
let a = 3; switch (a) < case 4: alert('Правильно!'); break; case 3: // (*) группируем оба case case 5: alert('Неправильно!'); alert("Может вам посетить урок математики?"); break; default: alert('Результат выглядит странновато. Честно.'); >
Теперь оба варианта 3 и 5 выводят одно сообщение.
Возможность группировать case – это побочный эффект того, как switch/case работает без break . Здесь выполнение case 3 начинается со строки (*) и продолжается в case 5 , потому что отсутствует break .
Тип имеет значение
Нужно отметить, что проверка на равенство всегда строгая. Значения должны быть одного типа, чтобы выполнялось равенство.
Для примера, давайте рассмотрим следующий код:
let arg = prompt("Введите число?"); switch (arg)
- Для ‘0’ и ‘1’ выполнится первый alert .
- Для ‘2’ – второй alert .
- Но для 3 , результат выполнения prompt будет строка «3» , которая не соответствует строгому равенству === с числом 3 . Таким образом, мы имеем «мёртвый код» в case 3 ! Выполнится вариант default .
Задачи
Напишите «if», аналогичный «switch»
важность: 5
Напишите if..else , соответствующий следующему switch :
switch (browser)
Если совсем точно следовать работе switch , то if должен выполнять строгое сравнение ‘===’ .
Впрочем, для таких строк, подойдёт и обычное сравнение ‘==’ .
if(browser == 'Edge') < alert("You've got the Edge!"); >else if (browser == 'Chrome' || browser == 'Firefox' || browser == 'Safari' || browser == 'Opera') < alert( 'Okay we support these browsers too' ); >else
Обратите внимание: конструкция browser == ‘Chrome’ || browser == ‘Firefox’ . разбита на несколько строк для лучшей читаемости.
Но всё равно запись через switch нагляднее.