switch case в JavaScript

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.

Пример №1

    
    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.

Пример №2

Если не использовать 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

Пример №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').

Группировка case

Благодаря тому, что break является прямым указанием на выход из switch и без него выполнение кода идет дальше, появляется возможность построения цепочек case, которые используют один и тот же код (инструкцию).

Пример №4

    
    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" );
    }
    

Проверка равенства в switch

Проверка соответствия выражения и valueN происходит по правилам строгого равенства (===) - значения должны быть одного типа.

Пример №5

    
    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.