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 语句)