我正在尝试这个简单的代码,似乎用户的输入没有经过所有比较并立即跳转到默认值。我猜 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
作为开关的表达式
。
The switch statement evaluates an expression, matching the expression's value to a case clause, and executes statements associated with that case.[Ref]
switch 语句首先计算其表达式。然后它会查找第一个 case 子句,其表达式的计算结果与输入表达式的结果相同(使用严格比较,===
),并将控制权转移到该子句,执行关联的语句。 (如果多个案例与提供的值匹配,则选择第一个匹配的案例,即使这些案例彼此不相等。)。如果未找到匹配的 case 子句,程序将查找可选的 default 子句,如果找到,则将控制转移到该子句,执行相关语句。
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.');
关于javascript - Switch 语句比较用户输入 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685935/