在最近与初级JavaScript开发人员的谈话中,我提到了以下技术,用于减少使用OR操作数的费力的if / else块:
if (/^(cat|dog|horse)$/.test(animal)) { ... }
而不是
if (animal == 'cat' || animal == 'dog' || animal == 'horse') { ... }
我对此从未遇到过任何问题,但一个人认为这是一种不良的设计模式,没有详细说明原因。
最佳答案
在我看来,这是“试图变得太聪明”,并且这样做,您引入了几个新的潜在失败点(使用regex语法),并使代码的表现力/惯用法降低了。如果您的操作数以某种方式从'cat'
变为动态或可变,您也将感到困难。
通常,在执行此类操作时,我只会介绍一个数组:
if (['cat', 'dog', 'horse'].indexOf(animal) != -1) { ... }
不过,老实说,这都是可笑的主观,因此我无法给您“正确”的答案。
通常,在这一点上,我会介绍性能问题,但是由于您只需要扫描一次输入,因此实际上您可能有一个更快的解决方案。这取决于正则表达式本身可以被解析的速度。