我最初写道我看到只有一个解决方案,但是在我的睡眠期间,我想出了一个极好的解决方案。
请务必记住,开关不会执行隐式类型转换来比较案例,因此如果您向switch语句提供了一个字符串,它将不会与案例中的整数相匹配,反之亦然。 如果你想比较字符串和整数,你将不得不把你的整数转换为一个字符串,然后再比较字符串。
高超的解决方案:
正如WouterH指出的那样,我最初的解决方案将解决使用一个包含数字的字符串时,默认情况下,预计switch语句的行为。但是为了解决这个问题,分析这个论证可能是有用的。对于您可以使用下面的代码:
var x = "1";
switch (isNaN(x) || parseInt(x))
{
case true:
alert("IsNaN!")
break;
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
default:
alert("default");
break;
}
我最初精湛的方法:
var x = "clearly not a number";
switch(x){
case !isNaN(x) || x:
alert("IsNaN!")
break;
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
default:
alert("default");
break;
}
isNaN将返回true,如果X到那里是一个字符串,但它其实并不重要,因为真正韩元由于switch语句的上述行为,因此不会评估为字符串。
我原来的解决方案:
我甚至不知道我在想什么,这看起来可怕的,压痕只是普通的尴尬,但感谢upvotes!
var x = "clearly not a number";
switch(x){
case 1:
alert("1");
break;
case 2:
alert("2");
break;
case 4:
alert("4");
break;
case default:
if (isNaN(x)){
alert("isNaN");
break;
}
alert("default");
break;
}
布拉德的解决方案:
THX布拉德这一个。 我不太喜欢这个,因为它感觉有点像黑客攻击,也就是说,这不是你希望如何使用case语句,但它确实给了你最大的灵活性,所以我很肯定有一个用例。
var x = "clearly not a number";
switch(true)
{
case x==1:
alert("1");
break;
case x==2:
alert("2");
break;
case IsNaN(x):
alert("IsNaN");
break;
case default:
alert("default");
break;
}
我相信唯一的办法是做t他是'switch(true)',case'=== 1',case是NNN(x)'语句。不是最理想的结构,但确实有效。 – Brad 2012-07-25 20:55:49
您可以在默认情况下执行isNan,并相应地更改您的逻辑 – nolegs 2012-07-25 20:57:13
将'case'的每个其他可能的值放入'x',然后'default'将会是'NaN'。 :) – tenfour 2012-07-25 21:00:12