Почему оператор switch автоматически отвечает на «default» - PullRequest
0 голосов
/ 08 декабря 2018

я пытаюсь выучить JavaScript дома, и я делаю некоторые базовые программы, на этом я пытаюсь использовать оператор switch, но я не понимаю, почему он автоматически отвечает «по умолчанию»

let note = Number(prompt("Quel note as tu eu au baccalauréat?"));

switch (note) {
  case (note < 10):
   console.log("Tu es refusé, retente ta chance l'année prochaine");
    break;
  case ((note => 10) && (note <= 12)):
   console.log("Tu as réussi l'éxamen, félicitations");
    break;
  case (note > 12):
   console.log("Félicitations, tu as réussi ton examen avec mention");
    break;
  default: console.log("Entre une note comprise entre 0 et 20")
  }

Ответы [ 4 ]

0 голосов
/ 09 декабря 2018

Это было то, что я искал:

let note = parseInt(prompt("Quel note as tu eu au baccalauréat?"));

if ((note < 0) || (note > 20)) {console.log("Entre une note comprise entre 0 et 20")}
else if (note < 10) {console.log("Tu as raté ton examen")}
else if ((note => 10) && (note <= 12)) {console.log("Félicitations")}
else if ((note > 12) && (note <= 20)) {console.log("Tu as réussi ton examen avec   mention")}

Спасибо за вашу помощь, ребята

0 голосов
/ 08 декабря 2018

Вам нужно использовать true вместо note

switch(note) -> switch(true)

Потому что условие, которое вы имеете для case, всегда будет иметь значение true и false. И вы пытаетесь сравнить его с числом, которое не совпадает ни с одним регистром, поэтому оно сразу перейдет к значению по умолчанию.

let note = Number(prompt("Quel note as tu eu au baccalauréat?"));

switch (true) {
  case (note < 10):
   console.log("Tu es refusé, retente ta chance l'année prochaine");
    break;
  case ((note >= 10) && (note <= 12)):
   console.log("Tu as réussi l'éxamen, félicitations");
    break;
  case (note > 12):
   console.log("Félicitations, tu as réussi ton examen avec mention");
    break;
  default: console.log("Entre une note comprise entre 0 et 20")
  }

PS - в таких случаях использование if else является лучшим вариантом, чем switch.

0 голосов
/ 08 декабря 2018
let note = Number(prompt("Quel note as tu eu au baccalauréat?"));

вместо номера попробуйте использовать parseInt

let note = parseInt(prompt("Quel note as tu eu au baccalauréat?"));

Это может решить вашу проблему

0 голосов
/ 08 декабря 2018

Ваше утверждение switch на самом деле не имеет смысла.

switch (note) говорит, что вы хотите сравнить значение note, но затем case (note < 10) говорит, что вы хотите сравнить его с результатомиз (note < 10).

Вы фактически спрашиваете, равен ли note (note < 10), то есть note == (note < 10).

Что вы можете сделать, это что-то вроде

switch (note) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
        ...
        break;
    case 10:
    case 11:
    case 12:
        ...
        break;

Но, как вы видите, это становится очень утомительным.switch не предназначен для сравнений на основе диапазона.Лучшее решение в вашем случае - просто использовать цепь if / else if.

...