Switch语句比较用户输入Javascript
我正在尝试这个简单的代码,似乎用户的输入没有经过所有的比较,而是立即跳转到默认值。我猜JS将用户的输入作为字符串。我确实尝试过parseInt(),但没有成功。这是我的密码Switch语句比较用户输入Javascript,javascript,switch-statement,user-input,Javascript,Switch Statement,User Input,我正在尝试这个简单的代码,似乎用户的输入没有经过所有的比较,而是立即跳转到默认值。我猜JS将用户的输入作为字符串。我确实尝试过parseInt(),但没有成功。这是我的密码 var number = prompt('What\'s your favority number?'); switch(number){ case (number < 10): console.log('Your number is to small.'); break;
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.');
}
var number=prompt('您的优惠号码是多少?');
开关(编号){
病例(数量<10例):
log('您的号码太小');
打破
病例(数量<100):
log('至少你是两位数');
打破
病例(数量<1000):
log('看起来像是三位数字');
打破
违约:
log('看起来您在第四位');
}
使用true
作为开关的表达式
switch语句计算表达式,将表达式的值与case子句匹配,并执行与该case关联的语句。[]
switch语句首先计算其表达式。然后,它查找第一个case子句,该子句的表达式的计算结果与输入表达式的结果相同(使用严格比较),并将控制转移到该子句,执行相关语句。(如果多个事例与提供的值匹配,则选择匹配的第一个事例,即使事例彼此不相等。)。如果没有找到匹配的case子句,程序将查找可选的default子句,如果找到,则将控制权转移到该子句,并执行相关语句
if(number < 10) {
} else if(number < 100) {
} else if(number < 1000) {
} else {
}
var number=prompt('您的优惠号码是多少?');
数字=数字(数字)//使用'Number'将其转换为数字
开关(真){
//----^^^^
病例(数量<10例):
log('您的号码太小');
打破
病例(数量<100):
log('至少你是两位数');
打破
病例(数量<1000):
log('看起来像是三位数字');
打破
违约:
log('看起来您在第四位');
}
您不了解switch语句是如何工作的。它不是检查动态值的快捷方式。这是检查已知值的快捷方式
每种情况都是一条语句,其计算结果为一个值。如果您这样做,您将看到它们具有case:value
,而不是您正在尝试的内容,即case:(表达式)
。所以,它将把所有的表达式转换成值
例如,您的第一个案例是:
case (number < 10):
当然,没有任何数字会计算为false
(从技术上讲0
是一个假值,但是开关使用==
比较而不是=
,因此0===false//false
)。因此,您的所有案例实际上都是case false
,因此开关将通过所有案例,并降落在默认案例上
因此,对于您的情况,switch语句是不合适的。您应该使用if语句
if(number < 10) {
} else if(number < 100) {
} else if(number < 1000) {
} else {
}
(是的,使用parseInt
确保您有整数。)我不介意向下投票。但请给出合理的理由!这是一个完美的答案!++!,也许你要补充一点,比较结果是@NinaScholz。更新!谢谢;)
switch(number) {
case 10:
break;
case 100:
break;
case 1000:
break;
default:
}