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 шт):

Автор решения: OPTIMUS PRIME

Потому что 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;
  }
}

→ Ссылка
Автор решения: Grundy

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;
    ...
→ Ссылка