Javascript 在 if 语句中返回 false

Posted

技术标签:

【中文标题】Javascript 在 if 语句中返回 false【英文标题】:Javascript return false in if statements 【发布时间】: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 - 请将代码行缩进四个空格,否则它们将不会被格式化为代码。 最好开始标记答案,否则以后没有人会回答您的问题。用你的随机数用户名,我猜你不在乎。 感谢您的指点。如何标记我的答案?这意味着什么? 【参考方案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? ==> ! 感谢您提供的信息,这无疑帮助我获得了我正在寻找的洞察力。

以上是关于Javascript 在 if 语句中返回 false的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 条件返回语句(简写 if-else 语句)

第六章 控制流程

shell简单命令与if语句,从这里开始shell的学习之路

JavaScript 使用误区 5 (转)

在javascript中返回语句后执行语句

JavaScript 使用误区