2013-05-07 105 views
-3

這個我可以簡化或獲得性能,這是聲明如何if語句

if(validator(foo) && foo.var1 || foo.var2 || foo.var3 || foo.var4){ 
    //do sometihng 
}else{ 
    //do anything because if foo.* doesnt exists i cant do anything 
} 

的聲明說:驗證需要有效FOO,並返回true,並VAR1或VAR2 VAR3或VAR4必須存在。

如果有人需要解釋,只需添加評論。這是一個簡單的問題,但我試圖在我的代碼中獲得性能。順便說一下,有任何書籍或教程,有關於JavaScript中的性能代碼的一些信息。

謝謝大家!

+1

您是否知道此代碼很慢? – 2013-05-07 00:35:41

+0

在這一點上過時了,但這確實奠定了一個良好的基礎:http://www.amazon.com/Performance-JavaScript-Faster-Application-Interfaces/dp/059680279X – 2013-05-07 00:37:25

回答

4

如果validator(foo)是一個昂貴的操作,你可以扭轉測試的順序:

if ((foo.var1 || foo.var2 || foo.var3 || foo.var4) && validator(foo)) { 
} else { 
} 

如果validator(foo)也不是特別貴,有可能是沒有理由花費任何時候都想着如何改善這一小段代碼的性能。你的時間有更好的用途。

順便說一句,這段代碼是基於你的口頭描述。你的代碼與口頭描述不兼容,可能是越野車。在JavaScript中,false && false || true評估爲true。你可能需要

if(validator(foo) && (foo.var1 || foo.var2 || foo.var3 || foo.var4)) { 

此外,本傑明指出,foo.var1不會測試foo.var1存在;它會檢查它是否存在(在foo或其原型鏈中),而且不是「falsy」值。 (例如,如果foo.var1爲0,則它​​將評估爲false。)您可能正在尋找foo.hasOwnProperty('var1')等。

+0

此外,'foo.var1'和它的所有朋友都不檢查物體上是否存在財產。他們檢查是否在原型鏈的某個地方擁有所有這些屬性,並且他們都不是虛假的。 – 2013-05-07 00:37:34

+0

@BenjaminGruenbaum - 好點。很難確切知道OP用這個代碼試圖完成什麼。 – 2013-05-07 00:43:09

+0

好吧,可能沒有一個完整的問題,和一個硬性desription ...但你的答案解決了我的問題TNX! – andrescabana86 2013-05-07 01:05:16