switch
- это конструкция, которая позволяет выполнять инструкции исходя из значения выражений. switch
является более наглядным способом сравнить выражение с несколькими вариантами описанными внутри, таким образом заменяя сразу же несколько if
.
switch
switch (выражение) {
case value1: // если (выражение === value1)
инструкция
break;
case value2: // если (выражение === value2)
инструкция
break;
case value3: // если (выражение === value3)
инструкция
break;
default:
инструкция
break;
}
выражение
- значение, которое сравнивается с value1
, value2
, value3
и т.д.
инструкция
- код который выполнится, если выражение соответствует valueN
.
break
- команда отвечающая на выход из конструкции switch
.
default
- необязательный блок, который выполняется, если выражение не соответствует ни одному valueN
.
Конструкция switch
может иметь один или более блоков case
.
let a = 1 + 2;
switch (a) {
case 1:
alert('a = 1');
break;
case 2:
alert('a = 2');
break;
case 3:
alert('a = 3');
break;
default:
alert("a > 3");
}
В данном примере а
равно 3 и switch
по порядку сравнивает это значение с вариантами из case
. Пропустив case 1
и case 2
, switch
остановится на case 3
и выполнит alert( 'a = 3' )
. break
в свою очередь закончит выполнение потока кода в конструкции. Если бы a
не равнялось 1, 2 или 3, тогда выполнился бы код из default
.
Если не использовать break
тогда выполнение кода пойдет дальше и будут выполнены инструкции в case
и default
расположенные ниже - проверки в свою очередь будут проигнорированы.
let a = 3 - 2;
switch (a) {
case 1:
alert('a = 1');
case 2:
alert('a = 2');
case 3:
alert('a = 3');
default:
alert("a > 3");
}
В данном случае в console будет выведено:
a = 1
a = 2
a = 3
a > 3
В switch
и case
значения могут быть выражены по разному.
let a = 3 - 1;
let b = 0;
switch (++a) {
case b + 1:
alert('a = 1');
break;
case b + 2:
alert('a = 2');
break;
case b + 3:
alert('a = 3');
break;
default:
alert("a > 3");
}
Здесь в switch
выражение принимает значение 3, что соответствует b + 3
, таким образом будет выполнено alert('a = 3')
.
Благодаря тому, что break
является прямым указанием на выход из switch
и без него выполнение кода идет дальше, появляется возможность построения цепочек case
, которые используют один и тот же код (инструкцию).
let a = 3 + 5
switch (a) {
case 2:
case 4:
case 6:
case 8:
case 10:
alert( 'a четное число' );
break;
case 1:
case 3:
case 5:
case 7:
case 9:
alert( 'a нечетное число' );
break;
default:
alert( "a > 10" );
}
Проверка соответствия выражения
и valueN
происходит по правилам строгого равенства (===) - значения должны быть одного типа.
let a = prompt("Введите число от 1 до 6");
switch (a) {
case '2':
case '4':
case '6':
alert('a четное число');
break;
case 1:
case 3:
case 5:
alert('a нечетное число');
break;
default:
alert("Выполнился код в default");
}
Информация указанная в поле для ввода имеет тип данных строка, поэтому при вводе 2, 4, 6 выполниться alert('a четное число')
, так как в case
'2', '4' и '6' приведены в формату строки.
При вводе 1, 3, 5, выполниться default
, так как в case
1, 3, 5 имеет формат число.
Конструкция switch
сравнивает начальное выражение со случаями описанными внутри и исходя из этого выполняет нужный код. switch
имеет в своем арсенале необязательные директивы break
и default
, что расширяет ее функционал и позволяет создавать цепочки case
, а также задавать инструкции в том случае, если выражение не соответствует ни одному case
.