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

chh*_*vey 16 javascript conditional if-statement

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

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
} else {
  noConditionsMet();
}
alwaysDoThis();
Run Code Online (Sandbox Code Playgroud)

我理解这对于嵌套if...else语句来说基本上是语法糖:

if (condition1) {
  doA();
} else {
  if (condition2) {
    doB();
  } else {
    if (condition3) {
      doC();
    } else {
      noConditionsMet();
    }
  }
}
alwaysDoThis();
Run Code Online (Sandbox Code Playgroud)

我从来没有见过的任何例子if...else if省略了最后else条款.但是看到简单的if语句(没有else子句)是有效的,并且通过上面的等效"嵌套语句",我的直觉告诉我这样做是可以的:

if (condition1) {
  doA();
} else if (condition2) {
  doB();
} else if (condition3) {
  doC();
}
alwaysDoThis();
Run Code Online (Sandbox Code Playgroud)

有人能指出我明确说明它是否有效的资源或示例?

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

use*_*342 11

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

else当没有指定的条件为真时,将执行trailing 子句.如果保证条件是集体穷举的,那么一个else条款完全是多余的,除非可能包含一个捕获"不可能"条件的断言.在你的情况,你是否需要一个else条款取决于您是否要特定的代码运行,当且仅当没有的condition1,condition2以及condition3是真实的.

else任何 if语句都可以省略,/ chain 的最后if一个没什么特别的.这在任何JavaScript语法中都有记录,例如在规范中.ifelse if


Poi*_*nty 10

你永远不需要一个else条款.(很难提供一些不必要的例子,所以我会留下它.)

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

  • 但是,请注意,这不会扩展到三元条件运算符:`a?b:c`永远不会变成'a?b`(但是`a && b`具有你期望的语义). (2认同)

Kev*_*Bot 9

它是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
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 谢啦!我想我没有添加最后一个 else 是做错了什么。 (2认同)