切换案例 - 否则条件

时间:2011-12-23 12:36:13

标签: javascript

<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。我希望如果theDay!= 5,然后显示'Finally Something'..同样适用于其他人......

没有If / else条件是否可行。 如果案例5没有执行,我可以在那个地方做其他事吗?

6 个答案:

答案 0 :(得分:4)

  

没有If / else条件是否可行。如果案例5没有执行,我可以在那个地方做其他事吗?

没有

switch语句将执行第一个匹配的情况,然后继续(忽略所有进一步的case标签),直到它到达break语句或switch块的结尾 - 但即使你可以“掉头”到通过省略break语句后续的情况,switch没有提供任何机制来说“当这种情况不匹配/执行时做某事,但也继续试图寻找匹配的情况”。

您所描述的内容通常是通过一系列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!");
   }
}

如果您需要以特定顺序执行个案,请使用数组而不是对象。

答案 1 :(得分: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;
}

答案 2 :(得分: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!");
}

答案 3 :(得分:0)

它的类似开关跳转到匹配的情况,如果它不匹配,它将跳转到匹配的情况。问题的答案&#34;如果案例5没有执行,我可以在那个地方做点其他事吗?&#34;是不,因为它根本不会达到这种情况。它跳转到下一个匹配的情况或默认情况。

答案 4 :(得分:0)

是否可能没有If / else条件。如果案例5没有执行,我可以在那个地方做其他事情吗?

使用默认代码块,如下所示。与案例不符的任何内容都将退回到默认案例。

switch(expression) {
      case x:
        // code block
        break;
      case y:
        // code block
        break;
      default:
        // code block
    }

这是如何工作的:

  • 将表达式的值与每种情况的值进行比较。
  • 如果匹配,则执行相关的代码块。
  • 如果不匹配,则执行默认代码块。

答案 5 :(得分:-1)

过于复杂的答案。

简化。

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

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

唯一可以在不进行比较的情况下制定的解决方案。 USE&#34; DEFAULT&#34; PATTERN

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