2014-12-08 230 views
0

在第二行打印console的評估看起來是正確的,但switch語句不起作用。我沒有得到任何錯誤。這個非常簡單的switch語句有什麼問題?

for (var i = 0; i < 100; i++) { 
    console.log(i % 3 === 0, i % 5 === 0); 
    switch (i) { 
     case i % 3 === 0: 
      console.log(i, " by three"); 
      break; 
     case i % 5 === 0: 
      console.log(i, " by five "); 
      break; 
    } 
} 

http://jsfiddle.net/vL4omdxs/

+1

你完全誤解了'case'語句。 – SLaks 2014-12-08 02:45:11

回答

3

正如評論所說,這不是你如何使用開關/外殼。 您可以評估switch中的條件,然後使用案例創建不同的行爲。

這裏是你的代碼稍加修改(實際上並非如此輕微,有一個小的數學扭曲):

var res = document.getElementById('r'); 
 
for (var i = 0; i < 100; i++) { 
 
    //console.log(i % 3 === 0, i % 5 === 0); 
 
    switch (i % 15) { 
 
     case 0: 
 
      r.innerHTML += i + " by three and five<br>"; 
 
      break; 
 
     case 3: 
 
     case 6: 
 
     case 9: 
 
     case 12: 
 
      r.innerHTML += i + " by three<br>"; 
 
      break; 
 
     case 5: 
 
     case 10: 
 
      r.innerHTML += i + " by five<br>"; 
 
      break; 
 
    } 
 
}
<div id="r"></div>


只是一個提示(offtopic,但可能會有所幫助):開關/外殼不是3/5問題的最佳方法。見它看起來多麼簡單使用IFS:

var res = document.getElementById('r'); 
 
    for (var i = 0; i < 100; i++) { 
 
     res.innerHTML += "<br>" + i + ": "; 
 
     if (i % 3 == 0) { 
 
      res.innerHTML += "by three "; 
 
     } 
 
     if (i % 5 == 0) { 
 
      res.innerHTML += "by five "; 
 
     } 
 
    }
<div id="r"></div>

+0

這很有道理。非常感謝。 – 1252748 2014-12-08 02:53:07

+0

不客氣。不要忘記,案例是基於交換機評估的結果。 – Shomz 2014-12-08 02:55:04

+1

這是一個很好的編輯。感謝您的額外幫助。 – 1252748 2014-12-08 03:02:48

0

這不是做switch語句的方式。它必須是:

switch (i % 3) { 
    case 0: 
     ... 
     break; 
    case 1: 
     ... 
     break; 
} 
1

Case表達式都進行嚴格的測試,平等,所以你需要從switch (1)開關更改爲switch (true)。但請注意,只有一個案例塊將被執行。

0

switch括號內的表達式與case關鍵字後的表達式進行比較。以您的代碼爲例:

for (var i = 0; i < 100; i++) { 
    console.log(i % 3 === 0, i % 5 === 0); 
    switch (i) { 
     case i % 3 === 0: // if (i) equals (i % 3 === 0), run this branch 
      console.log(i, " by three"); 
      break; 
     case i % 5 === 0: // if (i) equals (i % 5 === 0), run this branch 
      console.log(i, " by five "); 
      break; 
    } 
} 

請注意,「平等」這裏意味着===。由於你的case表達式都返回布爾值,它們永遠不會等於你的i,這是一個數字。