2010-08-16 169 views
4
 

elmid = "R125"; 

switch(true){ 

    case elmid.match(/R125/): 
     idType = "reply"; 
    break; 

} 

alert(idType); // Returns undefined 

-------------------BUT---------------------- 

elmid = "R125"; 

if (elmid.match(/R125/)){idType = "reply";} 

alert(idType); // Returns "reply" 

 

使用swtich返回undefined,但使用if返回期望值,導致交換機失敗的原因是什麼?爲什麼會這樣?我在這裏做錯了什麼?任何人都可以解釋爲什麼我得到不同的結果=)。javascript switch語句的問題

注意:在這種情況下沒有建議使用if語句我知道,我的問題簡潔,因此在switch語句中不僅有1個case。

回答

10
elmid.match(/R125/) 

這將返回實際的正則表達式匹配,真或假。

在編寫if語句並使用==時,可以執行一些基本類型轉換,以使其按預期工作。 Switch語句使用標識比較(===),所以這不起作用。

如果你想這樣做,使用regex.test()(它返回一個布爾值)來代替。

case /R125/.test(elmid): 
+0

謝謝你爲我清除那個=)...我只是在等這個愚蠢的計時器說「你可以在2分鐘內接受答案」:P – 2010-08-16 06:54:22

0

匹配函數返回一個數組或null,所以它永遠不會返回「true」。 但是你正在傳遞switch語句,所以你能夠檢查的是「真實的」。看比賽了()確定指標

Match Definition

但是,如果你使用的是if語句(與==操作符,而不是===運算符),也發現陣列將作爲真正有效的if語句。

0

.match返回匹配RegEx的匹配項,而不僅僅是truefalse
switch聲明中,測試值使用===而不是==進行比較。
所以得到的表達式["R125"] === true不是真的,並且case從未執行過。