【问题标题】:Can a "case" in "switch-case" javascript ignore errors and run "default" if one of "case" an error occurred?如果“case”之一发生错误,“switch-case”javascript中的“case”可以忽略错误并运行“default”吗?
【发布时间】:2020-10-23 16:32:25
【问题描述】:

在这种情况下,我想在switch-case 中忽略任何错误并运行default 中的case,在其中一种情况下,我找到一个文件JSON 并希望转换为Object 和在该文件中JSON 缺少语法, 还有{} 并做JSON.parse()for in 它会导致错误,我希望这个错误不会中断另一个代码或忽略错误并运行default in switch-case

let dataArray = ['image', 'gif', 'audio', 'video'];

for(let i = 0; i < dataArray.length; i++) {
  switch (dataArray[i]) {
    case 'image':
      // I want to ignore this error and run "default"
      unknownFunction();
      break;
    default:
      console.log('Default is run');
      break;
  }
}

【问题讨论】:

    标签: javascript jquery arrays for-loop switch-statement


    【解决方案1】:

    不,没有办法做到这一点。但是你可以尝试/捕捉:

    let dataArray = ['image', 'gif', 'audio', 'video'];
    
    for (let i = 0; i < dataArray.length; i++) {
      try {
        switch (dataArray[i]) {
          case 'image':
            // I want to ignore this error and run "default"
            unknownFunction();
            break;
          default:
            // Throw unmatched cases into catch block so that you can handle unmatched cases too.
            throw new Error('No matched cases.');
            break;
        }
      } catch(e){
        console.log('Default is run');
      }
    }

    有了这个,你基本上使用catch块作为你的default块,因此各种错误都会默认运行该块。您始终可以将更多逻辑放入 catch 块中以进行更多自定义。

    【讨论】:

      【解决方案2】:

      switch 中的 default 语句并非用于错误处理,它仅在所有其他情况都失败时才运行。您可能只想将整个 switch 语句包含在 try-catch 块中,并使用 catch 块作为默认值:

      let dataArray = ['image', 'gif', 'audio', 'video'];
      
      for(let i = 0; i < dataArray.length; i++) {
        try {
            switch (dataArray[i]) {
              case 'image':
                // I want to ignore this error and run "default"
                unknownFunction();
                break;
            }
        } catch (err) {
            console.log('Default is run');
        }
      }
      

      【讨论】:

      • 哇,谢谢,我刚刚发现switch-case 在没有default 的情况下仍在运行
      • @Firmansyah 很高兴你今天学到了一些东西。另请注意,如果您未定义 default 块,则当您有不匹配的案例时,catch 块将不会运行。
      【解决方案3】:

      您可以将try/catch 放在产生错误的代码周围,并将break 语句也放在那里。如果发生错误,break 语句将被跳过,您将进入下一个案例。

      但是如果你想得到默认值,这只有在默认值之前的最后一种情况下才有用。如果您有多个案例,您将无法在所有案例中都使用它。

      let dataArray = ['image', 'gif', 'audio', 'video'];
      
      for (let i = 0; i < dataArray.length; i++) {
        switch (dataArray[i]) {
          case 'image':
            // I want to ignore this error and run "default"
            try {
              unknownFunction();
              break;
            } catch {}
          default:
            console.log('Default is run');
            break;
        }
      }

      【讨论】:

        猜你喜欢
        • 2013-11-14
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        相关资源
        最近更新 更多