我正在尝试这个简单的代码,似乎用户的输入没有经过所有比较并立即跳转到默认值。我猜测JS正在将用户的输入作为字符串。我确实尝试过parseInt()但是没有用。这是我的代码;
$data_process="<link>http://news.abc.com/news/url?sa=t&fd=R&kkk&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);
答案 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:
}
确保你有整数。)