【问题标题】:Switch Case not showing correct resultsSwitch Case 未显示正确结果
【发布时间】:2022-05-11 02:34:40
【问题描述】:

这是我的脚本

var marks = 11;
switch (marks) {
  case (marks < 20):
    console.log('Yes Freaking Failed');
    break;
  case (marks > 20):
    console.log('Ahh Its Ok');
    break;
  case (marks > 80):
    console.log('Whooping');
    break;
  default:
    console.log('Cant say u maybe Flunked');
    break;
}

我认为它应该显示'Yes Freaking Failed',因为分数小于20。但它显示'Cant say u maybe Flunked'

这是为什么呢?

【问题讨论】:

标签: javascript switch-statement


【解决方案1】:

当你写作时

switch (x) {
case(y):
    ...
}

相当于测试

if (x == y) {
    ...
}

所以

case (marks < 20):

意思是:

if (marks == (marks < 20)) {

这样的范围测试不能使用case,需要使用一系列if/else if

if (marks < 20) {
    console.log('Yes Freaking Failed');
} else if (marks < 80) {
    console.log('Ahh Its OK');
} else {
    console.log('Whooping');
}

另外请注意,如果它按照您的想法工作,它永远不会执行marks &gt; 80,因为它也会匹配marks &gt; 20,并且总是执行第一个匹配的案例。

Cant say u maybe flunked 的情况没有必要,因为没有其他可能性。

【讨论】:

    【解决方案2】:

    技术上这是不可能的。 Javascript 做到了。

    如果需要比较,使用 if/else if/else。

    切换案例适用于您知道自己将拥有特定值的情况。

    var marks=11;
        switch(marks){
            case (11):
            console.log('It would go in here');
            break;
            case (42):
            console.log('If equal to 42');
            break;
            case (80):
            console.log('if equal to 80.');            
            break;
    
            default:
            console.log('Cant say u maybe Flunked');
            break;
        }
    

    【讨论】:

      【解决方案3】:

      您的代码相当于:

      var marks=11;
      switch(marks){
          case (true):
          console.log('Yes Freaking Failed');
          break;
          case (false):
          console.log('Ahh Its Ok');
          break;
          case (false):
          console.log('Whooping');    
          break;          
          default:
          console.log('Cant say u maybe Flunked');
          break;
      }
      

      marks 不是true 也不是false - 所以switch 转到default

      【讨论】:

        【解决方案4】:

        当您使用 switch 语句时,您正在评估标记并将标记的值与案例进行比较。并且您有以下情况:1、0、0,默认。这是因为 (marks

        【讨论】:

          猜你喜欢
          • 2015-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-14
          • 1970-01-01
          相关资源
          最近更新 更多