2012-01-05 79 views
1

我想请教一下在JavaScript if else statement.I优化有这样的Javascript的if else语句优化

if (thisIsTrue) 
    printMe("someMessage"); 

和代码的代码可以优化这样

thisIsTrue && printMe("someMessage"); 

的问题是什么thisIsTrue && printMe("someMessage");的代码只适用于已经返回true的声明。

如果退货是假的呢?

+2

怎么样'!thisIsFalse && printMe(“someMessage”)'。但是,这不是一个真正的优化;它所做的只是使代码更难以阅读。我会与你的第一个例子,并添加大括号。 – Peter 2012-01-05 08:11:29

回答

4
thisIsTrue ? printMe("is true") : printMe("is false"); 
+0

感谢你的回答你真实...我用这个'thisIsTrue? theTruthFunction():theFalseFunction();' – viyancs 2012-01-05 08:28:59

1

这几乎不是优化(就性能而言)。

另外,这两种形式并不相同。

后者是一种表达,而前者是一种表述。

13

您应该避免将您的代码变成一个难题,无论是为了别人,还是为了将来您。将你的条件与你的输出结合起来没有什么可以获得的。它不会“优化”任何东西,并且在您尝试调试时会花费您大量的时间。

我认为你应该在更多冗长的一面上犯错,而不是更少。

+4

+1尽管我认为更多的冗长并不是正确的目标,但更清晰。实际上,详细程度根本不是程序的期望属性(简单和简洁的程序非常棒),但是当必须在清晰度和冗长度之间做出选择时,清晰度总是会获胜。 – Anurag 2012-01-05 08:20:29

+0

请注意,某些JS压缩器会自动将if语句转换为a && b','a || b','a?b:c'(如uglifyjs),进一步否认需要编写这样的代码“,因为您可以”。还要注意,_normal_ if语句比现代浏览器 – 2012-01-05 08:25:45

+0

中的任何上述语句都快_faster_当然这就是我的意思......我并不是建议任何人都不应该让自己的程序更长时间,但如果你在把你的i ++放到一个非常聪明的地方,你确定这是你在使用i之前最后一次使用i的时候,我愿意提供现金,这最终会让你陷入屁股。只要把它放在自己的路线上。未来你会感谢你。 – 2012-01-05 08:27:14

2

虽然这不是优化,并没有建议,但我会解释细节。

在像 A && B操作数的组合

1stoperand A将被执行,如果它return truesecond operand将否则执行应当因为终止如果1st operandtrueresult意愿依赖于second operand否则如果1stfalseresult肯定会是false而不考虑第二个操作数,所以它不会执行第二个操作数。所以

true && alert("someMessage"); will show alert 

!false && alert("someMessage....."); will also show 

combinding以上两种,你可以写是

condition ? alert("someMessage") : alert("someMessage....."); 

小提琴:http://jsfiddle.net/9q2jC/1/

1

如果您有一系列的如 - 然后 - 其他的陈述,你应该尽力为orga从最可能的最不可能的方式把它们从最可能的通过这种方式,程序不必遍历所有不太可能的条件以达到可能的条件,这将更频繁地被调用。

一个常用的策略来排除一大群简单的条件语句可能会被忽略的任何开销,它将用If语句取代If-Then-Else。这是一个艰难的资格。虽然性能差异很大,但即使它很小,你几乎总是会得到某种改进。与往常一样,正确的代码设计更重要。看看有没有好的test cases带开关,如果不然其他地方