【问题标题】:Javascript - turning if statement into switch statementJavascript - 将 if 语句转换为 switch 语句
【发布时间】:2023-04-08 06:56:01
【问题描述】:

我正在尝试使用 javascript 将 if 语句转换为 switch 语句。这是有效的 if 语句:

      if(!error1(num, a_id) && !error2(num, b_id) && !error3(num, c_id) && !error4(num, d_id)) {
    a.innerHTML = num;

有关如何将其放入 switch 语句的任何提示都会很棒。谢谢

【问题讨论】:

  • 它通常是一个if/else if/else 链,可以转换为switch。这只是一个(尽管是复合的)if 条件。它不需要转换为开关。
  • 不可能没有看到error1error2等的代码
  • 您为什么要这样做?如果你有if (x == a || x == b || x == c),那么你可以将它设为switch (x) { case a: ... case b: ... case c: ... default: ... },但这里你有&&,而不是||

标签: javascript


【解决方案1】:

可以将此设为switch,但不清楚您为什么要这样做。乍一看,这不是您使用 switch 的那种情况(在一组值中选择并为每个值做不同的事情)。

虽然我不推荐,但方法如下:

switch (false) {
    case !error1(num, a_id):
    case !error2(num, b_id):
    case !error3(num, c_id):
    case !error4(num, d_id):
        // Do nothing
        break;
    default:
        a.innerHTML = num;
        break;
}

这适用于 JavaScript,但不适用于大多数其他具有 switch 的语言。它起作用的原因是当执行点到达它们时评估case 标签,它们是guaranteed to be evaluated in source code order。因此,您将打开值false,它将首先针对!error1(num, a_id) 的返回值进行测试(使用严格相等,===),然后如果不匹配,则针对!error2(num, a_id) 等.;如果它们都不匹配,则它们都评估true,并运行default 块中的代码。

【讨论】:

  • 我从没想过我会看到switch 混淆 if 而不是澄清它。
  • 这与原始代码的作用不同。如果 任何 个错误函数返回 false,这将成功,但如果 所有 个错误函数返回 false,则原始代码成功。一种解决方法是将case 条件更改为error1(num, a_id) 等,并将成功的代码移动到default 块(参见此jsFiddle)。
  • @CheranShunmugavel:糟糕,我可以发誓他使用的是||,但果然是&&谢谢! 已修复,但我认为我们都同意switch 不是这样做的方法。 :-) 另外,请注意您的小提琴不是相当正确的,因为switch 使用=== 所以我们必须防御errorX 返回“真实”和“虚假”值而不是实际 truefalse。见上文,我通过继续使用 ! 但匹配 false 而不是 true 来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2019-07-04
相关资源
最近更新 更多