2010-06-27 74 views
30

現在,在你們大家都跳起來說「你們過度關注表現」之前,讓我們說出來,我更多的是出於好奇而不是過於熱情的本性。這說...Javascript &&運算符與嵌套if語句:什麼更快?

我很好奇,如果使用& &(「和」)運算符和嵌套if語句之間的性能差異。另外,是否有實際的加工差異?即,& & 總是進程語句,或者它會停止@第一個,如果第一個失敗?這與嵌套if語句有何不同?

實例是明確的:

A)& &( 「和」)運算符

if(a == b && c == d) { ...perform some code fashizzle... } 

與B)嵌套if語句

if(a == b) { 
    if(c == d) { ...perform some code fashizzle... } 
} 

回答

29

性能差異可以忽略不計。當左手錶達式評估false時,&&運算符不會檢查右手錶達式。但是,&運營商將檢查兩個不管,也許你的困惑是由這個事實造成的。

在這個特定的例子中,我只是選擇使用&&,因爲這是更好的可讀性。

+1

不知道強迫和操作員。那很有意思! – 2010-06-27 02:56:08

+14

請注意'&'是/ bitwise /和運算符。把它看作'強制'版本的&&並不完全正確。例如:'1 && 2'是2而'1&2'是0. – 2010-06-27 03:10:56

2

像嵌套if S,&&是懶。
如果a是真實的,則表達式a && b將僅評估b

因此,這兩種情況在功能和性能上應該完全相同。

+2

你可能的意思是「只評估b如果是真實的」。 – 2010-06-27 02:52:41

11

如果您擔心性能,請確保a==bc==d更有可能失敗。這樣if聲明將會提前失敗。

+1

有人可以點亮我爲什麼對我的答案進行投票嗎? – 2010-06-27 03:20:26

+0

我不知道 - 你的建議對我來說似乎很好,所以我贊成你。 – 2010-06-27 03:47:37

+0

我的猜測是-1,因爲它沒有* reeaally *解決這個問題,這是對Javascript特殊點的好奇心,而不是一般的優化。 – Matchu 2010-06-27 03:50:04

1

一個peformance測試可能會幫助你弄明白:http://jsperf.com/simey-if-vs-if

似乎性能差異,兩者之間可以忽略不計不得了;然而,正如@Gert所說,早期失敗確實會改善事情。