0rislav
@0rislav
Юрист, который рвется в программисты! =)

Почему в моем случае не работает оператор switch?

Этот код работает:
var a = (prompt("Введите число от 1-го до 30-ти:"));
    if(a >= 1 && a <= 10 || a >= 21 && a <= 30) {
    alert("Не попал!");
    }
    
    else if(a >= 11 && a <= 20) {
    alert("Попал!");
    }
    
    else {
    alert("Вы ввели число больше 30-ти или не число.");
    }


Этот код не работает:
var a = (prompt("Введите число от 1-го до 30-ти:"));
switch(a) {
        case a >= 1 && a <= 10 || a >= 21 && a <= 30:
        alert("Не попал!");
        break;
    
        case a >= 11 && a <= 20:
        alert("Попал!");
        break;
    
        default: 
        alert("Вы ввели число больше 30-ти или не число.");
    }
  • Вопрос задан
  • 336 просмотров
Решения вопроса 1
Decadal
@Decadal
Потому что в case сначала вычисляется значение выражения а потом сравнивается с параметром. В данном случае у вас в case стоит предикат (функция которая возвращает результат булевского типа). Соответственно, switch проверит, является ли a - переменной со значением булевского типа. А ведь не является. И работать не будет. Попробуйте передать а как true - и увидите, как именно работает switch. Он выведет 'не попал', потому что при вычислении первого case параметр a будет приведен к 1 и пройдет по условию >= 1 && <= 10
Вам не подходит switch в данном случае
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы