【问题标题】:Javascript return false in if statementsJavascript 在 if 语句中返回 false
【发布时间】:2011-04-12 07:13:51
【问题描述】:

使用“return false;”是个好习惯吗?基本上在 if 语句中说什么都不做?例如:

if (navigator.userAgent.match(/iPad/i) != null) {
    return false;
} else {
    //Usual script here
}

只是想知道这是否有任何缺点。我可以在没有 else 的情况下使用 if 语句,但我只是想对此有所了解。我有一个不想在 iPad 上运行的插件,所以我将它包装在条件中。任何 cmets 将不胜感激!

【问题讨论】:

  • @user234694 - 请将代码行缩进四个空格,否则它们将不会被格式化为代码。
  • 最好开始标记答案,否则以后没有人会回答您的问题。用你的随机数用户名,我猜你不在乎。
  • 感谢您的指点。如何标记我的答案?这意味着什么?

标签: javascript if-statement return


【解决方案1】:

第 1 组会说这是一种可怕的做法,因为它很难遵循。

第 2 组会说做。

第 3 组会说做,但在 1 行中

第 4 组会说不要使用 else

第 5 组会说不要使用 return,只需在要运行的代码周围使用 if。 又名:

if (navigator.userAgent.match(/iPad/i) === null) {
    //Usual script here
}

【讨论】:

  • 如果 5 组人都走进一家酒吧会怎样?
  • 你会打架的。 Bud Spencer 风格!
  • 第 2 组将开始战斗并松散,因为它们的编码效率低下并且 punchGeek() 运行堆栈溢出。
【解决方案2】:

根据我的经验,仅当您实际上是在寻找要返回的 false 时。

【讨论】:

  • 换句话说,如果你想“什么都不做”,实际上“什么也不做”比“离开这里告诉他们这是假的”要好。当“什么都不做”时,明确表示你“什么都不做”也很好,而不仅仅是“忘记输入代码”,比如// Do nothing
  • 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。
【解决方案3】:

您实际上可以进一步简化它,如下所示:

if (navigator.userAgent.match(/iPad/i) != null) return false;
//Usual script here

这是“好的做法”...当然,如果它对您和您的团队有用。只要您无事可做就跳出一个功能,这是一种非常有效的做事方式,只要它易于理解和维护它的工作人员。

是否需要false具体取决于具体情况,例如,如果您想返回但不阻止其他事件处理程序稍后运行,您可能需要return true;

【讨论】:

  • 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。
【解决方案4】:

首先这是一个很好的练习,举这个例子

var window.__page_loaded__;
var Loadpage = function ()
{
    if(window.__page_loaded__ != undefined)
    {
         return; //The page has already laoded
    }

    //Proceed to load the page
}

通过使用return;,您可以执行与使用else 语句相同的操作,但没有额外的块,并且Loadpage() 通常不会返回任何数据,因此可以缩短您的代码。

【讨论】:

  • 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。
【解决方案5】:

只有当调用者打算用那个值做某事时,你才应该返回一个值。如果你想在 if 语句中“什么都不做”,这表明你的逻辑是错误的。将您的声明更改为:

if (navigator.userAgent.match(/iPad/i) == null) {
    //Usual script here
}

这样你就不需要用返回来“打破”你的函数(在这种情况下不是一个好的做法)。

【讨论】:

  • 我实际上更喜欢在 if 语句中“什么也不做”,有时是为了让我的代码看起来更干净(而不是进一步缩进)。
  • 我不明白。当你可以拥有if(!condition) { //do something }时,为什么还要拥有if(condition) {} else { //do something }
  • 从来没有一个else,而是更像if(!condition) {} else if(condition 2) { /* Do something */ } else { /* Do something else */ }而不是if(condition) { if(condition 2) { /* Do something */ } else { /* Do something else */ } }。它使我的代码使用更少的缩进,并且我认为编译器会优化它,但它认为合适。
  • 我更喜欢缩进而不是空的if 块。这对我来说是一个逻辑问题:)
  • 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。
【解决方案6】:

我同意snkmchnb,否则就否定条件。您可以使用这些来否定长表达式:

!(a && b) = !a || !b
!(a || b) = !a && !b

并多次使用这些来得到你想要的。例如,否定一个长表达式

!( (a && b || c) && (d || e) || f) =
    !((a && b || c) && (d || e)) && !f =
    (!(a && b || c) || !(d || e)) && !f =
    (!(a && b) && !c || !d && !e) && !f =
    ((!a || !b) && !c || !d && !e) && !f

现在看起来很难看,但大多数时候否定并不意味着过于复杂。例如否定 ""

所以永远不要使用 !(long_expression):

if (long expression)
{
}
else
{
  //do stuff here
}

【讨论】:

  • 作为参考,这些被称为德摩根定律 (en.wikipedia.org/wiki/De_Morgan's_laws)。而且你在第二定律中有一个错字:你想要刘海,而不是管道。
  • @Martinho - 刘海? --- 哦,你的意思是感叹号...not s? ==> !
  • 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 2016-01-10
  • 2019-05-11
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多