javascript - диапазон - Почему оператор Switch работает только с ключевым словом true?




javascript switch диапазон (2)

Параметр, заданный коммутатору, будет сравниваться с помощью === . В случаях, которые у вас есть, у вас есть выражения, которые приводят к boolean типу: n==0 || n==1 n==0 || n==1 или n >= 2 . Когда вы передаете число, он пытается сравнить ваше число с результатом, указанным в выражении в случаях. Так, например, с данным номером 1 он пытается сравнить 1 === (1 == 0 || 1 == 1) -> 1 === true который возвращает false (строгое сравнение). Таким образом, вы получаете текст по Default каждый раз.

Для первого случая вам нужно иметь номера в cases вашего коммутатора, а не boolean ( n==0 || n==1 результаты для boolean ).

Во втором случае у вас есть значение switch true для типа boolean Когда вы проходите снова 1 сравнение идет как true === (1 == 0 || 1 == 1) -> true === true и это возвращает true. Таким образом, вы получите желаемый результат в соответствии с вашим значением n . Но во втором случае нет целей с использованием true в качестве значения. Вы можете заменить его инструкцией if else if .

Если вы хотите получить одинаковый результат во многих случаях, вам нужно написать 2 случая друг над другом. Видеть это

case 0:
case 1:
  result

Здесь случаи имеют number типа, а не boolean .

Пример кода.

function test(n){
    switch (n) {
    case 0:
    case 1:
    console.log("Number is either 0 or 1");
    break;
    case 2:
    console.log("Number is 2")
    break;
    default:
    console.log("Default");}
}

test(0);
test(1);
test(2)

Может ли кто-нибудь объяснить мне, почему первый не работает, а второй работает?

Первое заявление

function test(n) {
    switch (n) {
    case (n == 0 || n == 1):
        console.log("Number is either 0 or 1");
        break;
    case (n >= 2):
        console.log("Number is greater than 1")
        break;
    default:
        console.log("Default");
    }
}

Второе заявление

function test(n) {
    switch (true) {
    case (n == 0 || n == 1):
        console.log("Number is either 0 or 1");
        break;
    case (n >= 2):
        console.log("Number is greater than 1")
        break;
    default:
        console.log("Default");
    }
}

switch использует строгое сравнение.

Вы принимаете число в операторе switch, а в случаях - только сравнения, возвращающие логическое значение.

Оператор switch сначала оценивает свое выражение. Затем он ищет предложение первого case , выражение которого оценивается с тем же значением, что и результат входного выражения (с использованием строгого сравнения , === ), и передает управление этому предложению, выполняя связанные операторы. (Если несколько случаев соответствуют предоставленному значению, выбирается первый случай, который соответствует, даже если случаи не равны друг другу.) Если не найдено подходящего case , программа ищет необязательное предложение по default , и если оно найдено, передает управление этому предложению, выполняя связанные операторы. Если предложение по default не найдено, программа продолжает выполнение в инструкции после окончания switch . По соглашению, предложение по default является последним предложением, но это не обязательно так.





switch-statement