讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議28:使用查表法提高條件檢測的性能 >

建議28:使用查表法提高條件檢測的性能

當有大量離散值需要測試時,使用if和switch都比使用查表法要慢得多。在JavaScript中查表法可通過數組或普通對像實現,查表法訪問數據比if和switch更快,特別是當條件體的數目很大時。與if和switch相比,查表法不僅非常快,而且當需要測試的離散值數量非常大時,也有助於保持代碼的可讀性。

例如,在下面代碼中,使用switch檢測value值。


switch(value){

case 0:

return result0;

case 1:

return result1;

case 2:

return result2;

case 3:

return result3;

case 4:

return result4;

case 5:

return result5;

case 6:

return result6;

case 7:

return result7;

case 8:

return result8;

case 9:

return result9;

default:

return result10;

}


使用switch結構檢測value值的代碼所佔的空間可能與switch的重要性不成比例,代碼很笨重。整個結構可以用一個數組查詢替代:


var results=[result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,result10]

return results[value];


當使用查表法時,必須完全消除所有條件判斷。操作轉換成一個數組項查詢或一個對像成員查詢。使用查表法的一個主要優點:由於沒有條件判斷,當候選值數量增加時,基本上不會增加額外的性能開銷。查表法常用於一個鍵和一個值形成邏輯映射的領域,而switch更適合於每個鍵需要一個獨特的動作或一系列動作的場合。