JS | Не выводится alert через switch
Не выводится alert через конструкцию switch. P.S Не судите строго недавно начал изучать JS.
let age = prompt("Введите свой возраст");
switch(age){
case 0 > 12 :
alert("Ты еще ребенок!");
break;
case 18 > 35 :
alert("Ты подросток!");
break;
case 35 > 45 :
alert("Пора сажать дерево");
break;
case 45 > 60 :
alert("Пора уже на пенсию");
break;
Ответы (2 шт):
Потому что switch передает значение age, а case должен проверить его на строгое соответствие. Здесь вы имели в виду 0 > 12 "интервал", а оно совсем не про это. Это логическое выражение, которое всегда будет false (0 не больше 12). Все остальные выражения также, получают значение false. Т.е. у вас в коде написано:
switch ("20") { // допустим, ввели 20
case false:
break;
case false:
break;
...
Очевидно, строка "20" не равна false
Если очень хочется через switch, придется писать:
switch (age) {
case 0:
case 1:
...
case 12:
alert("Ты еще ребенок!");
break
case 13:
case 14:
...
}
А проще сделать это через if - else:
let age = Number( prompt("Введите свой возраст") );
// Надо заметить, что prompt всегда возвращает строку, даже если туда вводят число.
// Здесь это не играет роли, но если ожидается работа с числом, полезно сразу же
// превращать строку именно в число.
if (45 <= age) {
alert("45 <=");
} else if (35 <= age) {
alert("35 - 44");
} else if (18 <= age) {
alert("18 - 34");
} else {
alert("0 - 17");
}
Если таких "точек" проверки слишком много, можно будет собрать их в какой-нибудь объект и пройти циклом:
let points = [
{ point: 45, msg: "45+" },
{ point: 35, msg: "35 - 44" },
{ point: 18, msg: "18 - 34" },
{ point: 0, msg: "0 - 17" },
];
let age = +prompt("Введите свой возраст");
for (let obj of points ) {
if ( obj.point <= age ) {
alert( obj.msg );
break;
}
}
switch работает следующим образом:
Выражение expr из
switch (expr)
сравнивается со значениями выражений, указанными после case
case 0 > 12
case 18 > 35
и т.д.
В данном случае expr - это строка, результат выполнения prompt
Значения же у меток case только false.
Таким образом невозможно зайти ни в один из блоков.
Для решения нужно либо переписать все с использованием if
Либо передавать в switch значение true, а переменную age использовать в выражениях возле меток, например:
switch(true){
case 0 < age && age < 12 :
alert("Ты еще ребенок!");
break;
...