首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议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更适合于每个键需要一个独特的动作或一系列动作的场合。