我正在尝试这个简单的代码,用户的输入似乎没有经过所有的比较,而是立即跳到默认的代码。我猜JS将用户的输入作为字符串。我确实尝试过parseInt(),但没有成功。这是我的密码;
var number = prompt('What's your favority number?');
switch(number){
case (number < 10):
console.log('Your number is to small.');
break;
case (number < 100):
console.log('At least you're in the double digits.');
break;
case (number < 1000):
console.log('Looks like you're in three digits.');
break;
default:
console.log('Looks like you're in the fouth digits.');
}
使用true
作为开关的expression
。
switch语句计算表达式,将表达式的值与case子句相匹配,并执行与该case关联的语句。【参考】
switch语句首先计算其表达式。然后,它查找第一个case子句,该子句的表达式计算结果与输入表达式的结果值相同(使用严格比较===
),并将控制权转移到该子句,执行相关联的语句。(如果多个事例与提供的值匹配,则会选择第一个匹配的事例,即使这些事例彼此不相等。)。如果找不到匹配的事例子句,则程序会查找可选的默认子句,如果找到,则会将控制权转移到该子句,执行关联的语句
var number = prompt('What's your favority number?');
number = Number(number); //Use `Number` to cast it as a number
switch (true) {
//----^^^^
case (number < 10):
console.log('Your number is to small.');
break;
case (number < 100):
console.log('At least you're in the double digits.');
break;
case (number < 1000):
console.log('Looks like you're in three digits.');
break;
default:
console.log('Looks like you're in the fouth digits.');
}
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
编辑:正如@bergi在评论中所建议的,if/else
级联是解决这个问题的最佳方法。
var number = prompt('What's your favority number?');
number = Number(number); //Use `Number` to cast it as a number
if (number < 10)
console.log('Your number is to small.');
else if (number < 100)
console.log('At least you're in the double digits.');
else if (number < 1000)
console.log('Looks like you're in three digits.');
else
console.log('Looks like you're in the fouth digits.');
您不了解switch语句是如何工作的。它不是检查动态值的快捷方式。这是检查已知值的快捷方式。
每个事例都是一个语句,它被评估为一个值。如果你查看这些文档,你会发现它们有case: value
,而不是你正在尝试的case: (expression)
。所以,它将把你所有的表达式转化为值。
例如,您的第一个案例是:
case (number < 10):
但真正的情况是:
case false:
当然,没有数字会评估为false
(从技术上讲,0
是一个伪值,但交换机使用===
比较,而不是==
,所以0 === false // false
)。因此,你所有的案例都是case false
,所以开关通过所有案例,落在default
案例上。
因此,对于您的情况,switch语句是不合适的。您应该使用if语句。
if(number < 10) {
} else if(number < 100) {
} else if(number < 1000) {
} else {
}
只有当您知道以下值时,switch语句才适用:
switch(number) {
case 10:
break;
case 100:
break;
case 1000:
break;
default:
}
(是的,使用parseInt
来确保您有整数。)