我是否需要`if ... else if`语句中的最后一个'else`子句?

时间:2016-07-22 23:23:44

标签: javascript if-statement conditional

我见过的每个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();

有人可以指向我明确说明它是否有效的资源或示例吗?

另一方面,如果 有效,是推荐还是被认为是“不良做法”?

4 个答案:

答案 0 :(得分:9)

您永远不会需要 else条款。 (很难提供一些不必要的例子,所以我将其留在那里。)

编辑作为注释注释,语言符号中的方括号通常表示某些内容是可选的。

答案 1 :(得分:8)

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
    ...
}

答案 2 :(得分:5)

结尾else不是强制性的。至于是否需要,这取决于你想要达到的目标。

当没有指定的条件为真时,将执行尾随else子句。如果条件保证为collectively exhaustive,则else子句完全是多余的,除非可能包含一个捕获“不可能”条件的断言。在您的情况下,您是否需要else子句取决于您是否希望特定代码在condition1condition2condition3均为真时运行。

对于任何 else语句,

if可以省略,if / {{1}的最后if没有什么特别之处链。这在任何JavaScript语法中都有记录,例如:在the specification

答案 3 :(得分:1)

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

这是指向网站点线程的链接:click this。 stackoverflow上有一个类似的线程:click here