Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Switch语句比较用户输入Javascript_Javascript_Switch Statement_User Input - Fatal编程技术网

Switch语句比较用户输入Javascript

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;

我正在尝试这个简单的代码,似乎用户的输入没有经过所有的比较,而是立即跳转到默认值。我猜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.');
}
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:
}