2012-01-05 176 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帶開關,如果不然其他地方