2010-12-15 68 views
4

我確信這個問題肯定有一個非常簡單的答案,但冒着聽起來很愚蠢的風險 - 我無法讓這個開關語句正常工作。輸入變量'status'可以是'public'或'draft',我可以向你保證它只保存這兩個值中的一個,因爲我已經在各個階段提醒它了,無論如何,這裏的if語句有效。看看:Javascript switch語句 - 很簡單,我做錯了什麼?

 function switch_status(status){ 
      if (status == 'public'){ 
       return false; 
      } if (status == 'draft') { 
       return true; 
      } 

^這個工作,但用下面的'switch'語句替換'if'不起作用。

  switch(status){ 
      case 'public': 
       return false; 
      case 'draft': 
       return true; 
      } 
     } 

第一個給我提供了不可避免的尷尬簡單的答案贏得了我的榮譽!

編輯:這是我的全部代碼 -

 $('.status').live('click', 
       function(){ 
        fullClass = $(this).attr('class'); 
        id = fullClass.split(' ').slice(-1); 
        status = fullClass.split(' ').slice(-2,-1); 
        var newStatus = switch_status(status); 
        alert(newStatus); 
      }); 

     function switch_status(status){ 
//    if (status == 'public'){ 
//     return false; 
//    } if (status == 'draft') { 
//     return true; 
//    } 

      switch(status){ 
       case 'public': 
        return false; 
       case 'draft': 
        return true; 
      } 
     } 
+1

使用'switch'時報錯嗎?一些上下文代碼也可能有幫助 - 沒有任何發佈會顯示問題。 – 2010-12-15 16:13:12

+0

嘗試添加最後一種情況後的默認代碼塊 - 默認值:返回false – lnrbob 2010-12-15 16:18:17

+0

@ g.d.d.c我剛剛附加了完整代碼的問題。警報顯示'undefined',但是當用'if'代替'switch'時,我得到正確的返回值...(!??) – Inigo 2010-12-15 16:19:13

回答

4

你傳遞status作爲一個字符串(的slice結果)的陣列,而不是隻是一個字符串。

當您檢查數組和字符串之間的相等性時,看起來強制導致相等性檢查工作。但是,轉換聲明中不會發生強制。

如果我改變

status = fullClass.split(' ').slice(-2,-1); 

status = fullClass.split(' ').slice(-2,-1)[0]; 

然後正常工作。

+0

這將是那裏的關鍵。接得好。 – 2010-12-15 16:26:11

+0

@ JacobM哈哈哈,你是舞者!謝謝!所以,如果我不偏離這個問題的範圍,你會如何將它轉換爲字符串? (只是把它包起來)謝謝。 – Inigo 2010-12-15 16:35:00

+0

編輯添加修復程序。 – 2010-12-15 16:35:55

1

我懷疑由於類型轉換髮生此問題。

Javascipt通常是一種鬆散類型的語言。您之前使用的if語句使用寬鬆的==比較。這工作得很好。

但是,switch語句是另一回事。爲了匹配,數據類型必須匹配。換句話說,在將status傳遞給switch語句之前,必須將其轉換爲字符串。

0

我在jQuery循環中使用了一個.each,並將值與'this'進行了比較;如果我使用console.log,我可以清楚地看到'this'具有正確的值。它在if/else邏輯中工作,但在switch/case邏輯中失敗。

的解決方案是:

VAR OBJ = this.toString();

switch(obj){ 
    case 'one': ... 
    case 'two': ... 
} 

通過強制「這個」字符串類型,在開關邏輯現在的作品。