我需要一个最后`else`子句中`如果...别的if`声明? [重复]

问题描述 投票:11回答:4

这个问题已经在这里有一个答案:

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

可有人点我的资源或例如明确表示它是否是有效的?

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

javascript if-statement conditional
4个回答
9
投票

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

当没有指定条件为真后else子句就会执行。如果条件保证是collectively exhaustive,那么else子句完全是多余的,除了可能以包含捕获“不可能”的条件的断言。在你的情况,你是否需要else条款取决于您是否要特定的代码运行,当且仅当没有condition1condition2condition3都是真实的。

else可以为任何if声明被忽略,没有什么特别在if / if链的最后else if。这在任何JavaScript语法记载,例如在the specification


10
投票

你永远需要一个else条款。 (很难提供的东西是没有必要的例子,所以我会留在这。)

编辑的评论指出,方括号中的语言语法符号通常表明什么是可选的。


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

2
投票

无需其他一个块,他们是不是如果else语句,但是如果语句。考虑别的,ELSEIF作为扩展。

这里有一个sitepoint线程的链接:click this。和计算器上类似的线程:click here

© www.soinside.com 2019 - 2024. All rights reserved.