我最初寫道我看到只有一個解決方案,但是在我的睡眠期間,我想出了一個極好的解決方案。
請務必記住,開關不會執行隱式類型轉換來比較案例,因此如果您向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