2011-12-23 94 views
0
<script type="text/javascript"> 
//You will receive a different greeting based 
//on what day it is. Note that Sunday=0, 
//Monday=1, Tuesday=2, etc. 

var d=new Date(); 
var theDay=d.getDay(); 
switch (theDay) 
{ 
case 5: 
    document.write("Finally Friday"); 
    break; 
case 6: 
    document.write("Super Saturday"); 
    break; 
case 0: 
    document.write("Sleepy Sunday"); 
    break; 
default: 
    document.write("I'm looking forward to this weekend!"); 
} 
</script> 

如果是theDay = 5,那麼我們顯示Finally Friday。我想如果日!= 5,然後顯示'最後的東西'..類似的其他人也...Switch case - else condition

是否有可能沒有If/else條件。 如果案件5不執行,我可以在那個地方做其他事嗎?

+0

你的意思是要更改或添加到文本中'default'情況? – 2011-12-23 12:39:22

+0

@FelixKling:我想如果5不執行,那麼應該發生其他的事情... 6或0可能會執行... – 2011-12-23 12:40:09

+2

使用普通老的if ... else有什麼問題? – 2011-12-23 12:41:27

回答

0

你可以這樣做:

var something = 0; 

switch (theDay) { 
    case 5: 
     document.write("Finally Friday"); 
     something = 15; 
     break; 
    case 6: 
     document.write("Super Saturday"); 
     something = 16; 
     break; 
    case 0: 
     document.write("Sleepy Sunday"); 
     something = 20; 
     break; 
    default: 
     document.write("I'm looking forward to this weekend!"); 
} 


switch (something) { 
    case 15: document.write("Not Friday"); break; 
    case 16: document.write("Not Saturday"); break; 
    case 20: document.write("Not Sunday"); break; 
    default: document.write("Nothing"); break; 
} 
+0

這些行可能有用,但請注意,如果日期=== 5,您的代碼將寫入「Finally Friday」,然後是「Not Friday」(其他日期等等)。 – nnnnnn 2011-12-24 03:42:05

0

一個標準的if/else將是實現這一目標的最佳途徑。我想知道你爲什麼想不這樣做。

這就是說,它不是很優雅,但你可以嘗試添加以下到您的switch語句的頂部:

case 0: 
case 1: 
case 2: 
case 3: 
case 4: 
case 6: 
    document.write("Finally Something"); 

給你:

switch (theDay) 
{ 
case 0: 
case 1: 
case 2: 
case 3: 
case 4: 
case 6: 
    document.write("Finally Something"); 
case 5: 
    document.write("Finally Friday"); 
    break; 
case 6: 
    document.write("Super Saturday"); 
    break; 
case 0: 
    document.write("Sleepy Sunday"); 
    break; 
default: 
    document.write("I'm looking forward to this weekend!"); 
} 
+2

這是行不通的。如果值是6,它將只執行第一個匹配的案例加上任何跌落。它永遠不會做第二種情況6. – nnnnnn 2011-12-24 03:04:40

0

它就像開關不跳到匹配的情況下,如果它不匹配,它會跳轉到匹配的地方。對你的問題的回答「如果案件5不執行,我可以在那個地方做別的事嗎?」是否,因爲它從來沒有達到這種情況。它跳轉到下一個匹配的案例或默認值。

2

是否可能沒有If/else條件。如果案件5不執行,我可以在那個地方做其他事嗎?

switch語句將執行第一個匹配的情況下,再繼續下去(忽略所有進一步的情況下標籤),直到它獲取到任何一個break語句或開關塊的結束 - 但即使您可以通過省略break語句來「落後」到後續案例,交換機也不會提供任何機制來說「在此案例不匹配/執行時執行某些操作,還會繼續嘗試查找匹配案例」。

你所描述通常會用一系列if/else語句來完成:

var d=new Date(), 
    theDay=d.getDay(), 
    matched = false; 

if (theDay===5) { 
    matched = true; 
    document.write("Finally Friday"); 
} else { 
    // your != 5 case here 
} 
if (theDay===6) { 
    matched = true; 
    document.write("Super Saturday"); 
} else { 
    // your != 6 case here 
} 
if (theDay===0) { 
    matched = true; 
    document.write("Sleepy Sunday"); 
} else { 
    // your != 0 case here 
} 

// default when none matched: 
if (!matched) { 
    document.write("I'm looking forward to this weekend!"); 
} 

請注意,我添加了一個matched標記,以使默認工作。並且請注意,沒有else if語句,因爲您需要執行每個if/else對。

如果你是真的決心用switch語句,你可以做一些類似如下:

var d=new Date(), 
    theDay=d.getDay(), 
    c, 
    cases = { // pre-list all the "not" cases 
      "!5" : true, 
      "!6" : true, 
      "!0" : true 
      }; 

// add case for theDay and remove the "not" case for theDay (if there is one) 
cases[theDay] = true; 
if (cases["!" + theDay]) 
    delete cases["!" + theDay]; 

for (c in cases) { 
    switch(c) { 
     case "5": 
     document.write("Finally Friday"); 
     break; 
     case "!5": 
     document.write("Finally Something"); 
     break; 
     case "6": 
     document.write("Super Saturday"); 
     break; 
     case "!6": 
     document.write("Finally Something - but not 6"); 
     break; 
     case "0": 
     document.write("Sleepy Sunday"); 
     break; 
     case "!0": 
     document.write("Finally Something - but not 0"); 
     break; 
     default: 
     document.write("I'm looking forward to this weekend!"); 
    } 
} 

如果你需要的情況下,按照特定的順序來執行使用數組,而不是一個東西。

0

過於複雜的答案。

簡化。

var switchElse = true; 
switch (CHECK_SOMETHING) 
{ 
    case "SOME_VALUE": 
     ...DO SOMETHING... 
     switchElse = false; 
     break; 
    default: 
} 

if (switchElse) 
{ 
     ...DO ELSE... 
} 

唯一的解決方案,可以制定沒有比較。 USE 「DEFAULT」 PATTERN

var myValue = "Friday" 
switch (CHECK_SOMETHING) 
{ 
    case "SOME_VALUE": 
     myValue = "Some Other Day"; 
    default: 
} 
+0

與其他人相比,它更簡單嗎?什麼是默認模式? – dakab 2016-02-10 19:23:17