【问题标题】:What if we use only "else" block for "if...else" statement in javascript如果我们在 javascript 中只对“if...else”语句使用“else”块怎么办?
【发布时间】:2021-03-04 16:12:19
【问题描述】:

我知道“if”语句可以在没有 javascript 中的“else”块的情况下使用。但是如果我只需要一个“else”块怎么办?在这种情况下应该是什么语法?

    if (req.body[data].length <= maxlength[indx]); // <===== semicolon
    else {
      req.body[data] = 'ERROR: too long';
      status = 404;
    }

    if (req.body[data].length <= maxlength[indx]) {} // <===== empty block
    else {
      req.body[data] = 'ERROR: too long';
      status = 404;
    }

ECMA stanadrt 对此案只字未提 (https://262.ecma-international.org/5.1/#sec-12.5)

【问题讨论】:

  • 为什么不直接颠倒if测试的逻辑
  • 但如果我颠倒逻辑,我会在代码中说:“status = 404;”连续几次
  • 这没有多大意义,但它可能有助于澄清您是否会在问题中添加一个示例,说明为什么不希望反转 if 语句的逻辑。
  • 而且,至少在这种情况下,从认知的角度来看,倒置更有意义。

标签: javascript node.js if-statement syntax


【解决方案1】:

反转逻辑似乎是这里最合理的选择。实际上反转逻辑也与代码的可读性有关,如果你反转逻辑并将它们放在开头,它们通常被称为 Guard Clauses,这大大提高了可读性。您可以查看该主题。

【讨论】:

    【解决方案2】:

    澄清其他人的回答:

    在您的特定情况下,您可以反转操作符,因此 &lt;= 将变为 &gt;

    在其他情况下,您可以使用! 来实现您想要做的事情。

    
        if (req.body[data].length <= maxlength[indx]); // <===== semicolon
        else {
          req.body[data] = 'ERROR: too long';
          status = 404;
        }
    

    应该变成

    
        if (req.body[data].length > maxlength[indx]) {
          req.body[data] = 'ERROR: too long';
          status = 404;
        }
    

    我们的想法是与原始帖子中的条件相反,从而达到仅具有else 语句的相同目的。这样,代码仍然更易于阅读和推理。

    【讨论】:

    • 非常感谢大家!
    【解决方案3】:

    在这种情况下,我该怎么办?

    if (!address.street && !address.postcode && !address.city && !address.country)
     {    } 
    else {result = await geocode(address)}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2017-10-25
      • 2021-09-11
      • 2016-06-21
      • 2013-04-19
      • 1970-01-01
      • 2019-04-09
      相关资源
      最近更新 更多