使用条件的JavaScript switch-case

时间:2013-07-28 17:15:01

标签: javascript

我刚开始学习java脚本,我对C#有非常基本的了解。

试着运行那段代码:

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

但是在< - p>之后它仍然失败了

number <= 9
你们可以帮我们帮忙吗?

非常感谢!

4 个答案:

答案 0 :(得分:6)

switch语句会将其参数与案例中表达式的值进行比较 - 在​​您的代码中,它会将number与案例中的布尔结果进行比较,因此它仅在第一种情况下得到您的number为1(因为1 == true),否则会降至default。您可以简单地将它们与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.");
    }

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

顺便说一下,要短得多

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

到目前为止,所有其他答案都缺失的是你不需要所有这些条件。

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

当然还有其他方法。对于这个特定的例子,一个简单的方法是使用

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

对于正整数,它将是位数,对于负数,它将只是0。可以使用这个数字的开关/案例陈述。

switch(true)是一种可怕的风格。它根本不是一个开关/案例的用途。

答案 3 :(得分:0)

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

或尝试使用switch(true)作为条件与布尔表达式进行比较。