简体   繁体   English

使用条件的JavaScript switch-case

[英]JavaScript switch-case using a condition

I just started learning java script and I have really basic knowledge in C#. 我刚刚开始学习java脚本,我对C#有非常基本的了解。

Tried running that 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 - 但它继续失败 -

number <= 9

can you guys please give me a hand here? 你们可以帮我们一把吗?

Thanks a lot! 非常感谢!

The switch statement does compare its argument with the values of the expressions in the cases - in your code, it does compare 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. switch语句会将其参数与案例中表达式的值进行比较 - 在​​您的代码中,它会将number与案例中的布尔结果进行比较,因此只有在您的number为1时才会出现第一种情况(因为1 == true )并且否则降至default You could simply compare them to true , like 你可以简单地将它们与true比较,比如

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-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.");

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."
);

你需要切换(true),其余的保持不变(我猜)。

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 . 对于正整数,它将是位数,对于负数,它将只是0 A switch/case statement over this number would be possible. 可以使用这个数字的开关/ case语句。

A switch(true) is terrible style. switch(true)是可怕的风格。 It simply isn't what a switch/case is intended for. 它根本不是一个开关/案例的用途。

Do it like this way using if/else: 使用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 compared with Boolean expression. 或者尝试使用switch(true)作为条件与布尔表达式进行比较。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM