在 if...else if 语句中是否需要最后一个 else 子句?

Do I need a last `else` clause in an `if...else if` statement?

我见过的每个 if...else if 示例都包含一个最终的 else 子句:

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
} else {
  noConditionsMet();
}
alwaysDoThis();

我知道这基本上是嵌套 if...else 语句的语法糖:

if (condition1) {
  doA();
} else {
  if (condition2) {
    doB();
  } else {
    if (condition3) {
      doC();
    } else {
      noConditionsMet();
    }
  }
}
alwaysDoThis();

我从未见过任何 if...else if 省略最后一个 else 子句 的例子。但是看到简单的 if 语句(没有 else 子句)是有效的,并且按照上面等效的“嵌套语句”,我的直觉告诉我这样做是可以的:

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
}
alwaysDoThis();

谁能给我指出明确说明其是否有效的资源或示例?

在另一个层面上,如果它 有效的,它会被推荐还是被认为是“不好的做法”?

您永远不需要 else 子句。 (很难提供一些不必要的例子,所以我就此打住。)

edit作为注释,语言语法符号中的方括号通常表示某些东西是可选的。

100%有效。不,这不是坏习惯。如果你不需要它,就不要写它。

以下面为例:

function doStuff(data) {
    if (data.something) {
        // go format the data in some way
    }
    else if (data.somethingElse) {
        // go format the data in some other way
    }
    // must be formatted correctly, don't do anything else
    ...
}

就 JavaScript 而言,结尾 else 不是强制性的。至于是否需要,就看你想达到什么目的了。

当指定条件中的 none 为真时,将执行尾随的 else 子句。如果条件是 collectively exhaustive,那么 else 子句完全是多余的,除了可能包含捕获“不可能”条件的断言。在您的情况下,是否需要 else 子句取决于您是否希望特定代码 运行 当且仅当 condition1condition2 和 [=16= 都不是] 是真的。

else 可以省略 any if 语句,[=18= 的最后一个 if 没有什么特别的]/else if链。这在任何 JavaScript 语法中都有记录,例如在 the specification.

不需要 else 块,它们不是 if else 语句而是 if 语句。考虑else,elseif作为扩展。

这里是一个 link 到站点主题的帖子:click this。 Whosebug 上的类似线程:click here