Switch语句比较用户输入Javascript

时间:2016-04-18 05:18:11

标签: javascript switch-statement user-input

我正在尝试这个简单的代码,似乎用户的输入没有经过所有比较并立即跳转到默认值。我猜测JS正在将用户的输入作为字符串。我确实尝试过parseInt()但是没有用。这是我的代码;

$data_process="<link>http://news.abc.com/news/url?sa=t&amp;fd=R&ampkkk&amp;url=http://example.com/abc<link>";
$find_delete="/<link>http:\/\/news\.abc\.com\/news\/url\?sa=.+url=/";
              ^                                                   ^
$replace_x="<link>";
echo preg_replace($find_delete,$replace_x, $data_process);

2 个答案:

答案 0 :(得分:3)

使用true作为expression进行切换。

  

switch语句计算表达式,将表达式的值与case子句匹配,并执行与该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>

答案 1 :(得分:1)

您不了解switch语句的工作原理。它不是检查动态值的快捷方式。这是检查已知值的快捷方式。

每个案例都是一个被评估为值的语句。如果您look at the docs,您会看到他们有case: value,而不是您正在尝试的内容case: (expression)。因此,它会将所有表达式转换为值。

因此,例如,您的第一个案例是:

case (number < 10):

但真正变成的是:

case false:

当然,没有数字会评估为false(技术上0是一个假值,但转换使用===比较而不是==所以{{1 }})。因此,您的所有案例都是0 === false // false,因此,所有案件都会落空并落在case false案件上。

因此,对于您的情况,switch语句是不合适的。你应该使用if语句。

default

switch语句仅在您知道值时才适用:

if(number < 10) {

} else if(number < 100) {

} else if(number < 1000) {

} else {

}

(是的,使用switch(number) { case 10: break; case 100: break; case 1000: break; default: } 确保你有整数。)