admin管理员组

文章数量:1302328

I just started learning JavaScript and I have a really basic knowledge of C#.

Tried running this piece of code:

var number = parseInt(prompt("Enter a number:"));

switch (number) {
  case number >= 1 && number <= 9:
    alert("The number " + number + " is a single digit number.");
    break;
  case number >= 10 && number <= 99:
    alert("The number " + number + " is a two digit number.");
    break;
  case number >= 100 && number <= 999:
    alert("The number " + number + " is a three digit number.");
    break;
  case number >= 1000 && number <= 9999:
    alert("The number " + number + " is a four digit number.");
    break;
  default:
    alert("Your number has 5 or more digits.");
}

but it kept failing after the following:

number <= 9

Can you guys please give me a hand here?

Thanks a lot!

I just started learning JavaScript and I have a really basic knowledge of C#.

Tried running this piece of code:

var number = parseInt(prompt("Enter a number:"));

switch (number) {
  case number >= 1 && number <= 9:
    alert("The number " + number + " is a single digit number.");
    break;
  case number >= 10 && number <= 99:
    alert("The number " + number + " is a two digit number.");
    break;
  case number >= 100 && number <= 999:
    alert("The number " + number + " is a three digit number.");
    break;
  case number >= 1000 && number <= 9999:
    alert("The number " + number + " is a four digit number.");
    break;
  default:
    alert("Your number has 5 or more digits.");
}

but it kept failing after the following:

number <= 9

Can you guys please give me a hand here?

Thanks a lot!

Share Improve this question edited Sep 17, 2021 at 10:29 Audwin Oyong 2,5313 gold badges19 silver badges36 bronze badges asked Jul 28, 2013 at 17:15 GalSabGalSab 1092 silver badges8 bronze badges 7
  • 1 Switch/Case are not used for conditions. – Shumail Commented Jul 28, 2013 at 17:17
  • So how can you do it differently apart from using if/else? and thank you! – GalSab Commented Jul 28, 2013 at 17:19
  • you can use conditions in switch case. – kul_mi Commented Jul 28, 2013 at 17:20
  • Why do you want to do it without using if/else (when that's -definitely- the right tool for the job)? – David Thomas Commented Jul 28, 2013 at 17:23
  • Hey David, thank you. And I only want it to learn about the rest of JavaScript's abilities as I already went over if/else. – GalSab Commented Jul 28, 2013 at 17:25
 |  Show 2 more ments

4 Answers 4

Reset to default 7

The switch statement does pare its argument with the values of the expressions in the cases.

In your code, it does pare the number with those boolean results from the cases, so it only gets in the first case when your number is 1 (because 1 == true) and falls to the default otherwise. You could simply pare them to true, like

switch (true) {
  case number >= 1 && number <= 9:
    alert("The number " + number + " is a single digit number.");
    break;
  case number >= 10 && number <= 99:
    alert("The number " + number + " is a two digit number.");
    break;
  case number >= 100 && number <= 999:
    alert("The number " + number + " is a three digit number.");
    break;
  case number >= 1000 && number <= 9999:
    alert("The number " + number + " is a four digit number.");
    break;
  default:
    alert("Your number has 5 or more digits.");
}

but it would be cleaner to use an if-else construct:

if (number >= 1 && number <= 9)
  alert("The number " + number + " is a single digit number.");
else if (number >= 10 && number <= 99)
  alert("The number " + number + " is a two digit number.");
else if (number >= 100 && number <= 999)
  alert("The number " + number + " is a three digit number.");
else if (number >= 1000 && number <= 9999)
  alert("The number " + number + " is a four digit number.");
else 
  alert("Your number has 5 or more digits.");

Btw, much shorter would be

var l = String(number).length;
alert(l<5
   ? "The number "+number+" is a "+[,"single","two","three","four"][number]+" digit number."
   : "Your number has 5 or more digits."
);

You need switch(true) and the rest stays the same (I guess).

What all the other answers are missing so far is the fact that you don't need all these conditions.

if (number >= 10000) {
    ...
} else if (number >= 1000) {
    ...
} else if (number >= 100) {
    ...
} else if (number >= 10) {
    ...
} else if (number >= 1) {
    ...
} else {
    ...
}

Of course there are other ways, too. For this particular example, an easy way would be to use

var digits = (number >= 0) ? number.toString().length : 0;

For positive integers it will be the number of digits, for negative numbers it will simply be 0. A switch/case statement over this number would be possible.

A switch(true) is terrible style. It simply isn't what a switch/case is intended for.

Do it like this way using if/else:

if( number >= 1 && number <= 9)
    alert("The number " + number + " is a single digit number.");
else if( number >= 10 && number <= 99)
    alert("The number " + number + " is a two digit number.");
else if( number >= 100 && number <= 999)
     alert("The number " + number + " is a three digit number.");
else if( number >= 1000 && number <= 9999)
     alert("The number " + number + " is a four digit number.");
else
     alert("Your number has 5 or more digits.");

Or Try using switch(true) as condition is to be pared with Boolean expression.

本文标签: JavaScript switchcase using a conditionStack Overflow