使用Array.includes()代替OR链

时间:2018-08-06 16:09:30

标签: javascript

哪个更好?我担心样式/可读性和性能。

someMathematicalExpression === 0 || someMathematicalExpression === 1 ||
 someMathematicalExpression === -1 || someMathematicalExpression === 11 || ...

vs。

[0,1,-1,11,...].includes(someMathematicalExpression)

OR链的优点是字面更清楚,而乍看之下.includes的意图可能并不明显。

另一方面,.includes可以更短,并且可以将解决方案与表达式分开,从而更容易查看哪些值将得出true
最重要的是,当someMathematicalExpression非常复杂时,整个OR链会变得非常繁重,难以阅读。

我只是想确保自己没有遗漏任何东西,或者检查是否有我没有考虑过的第三种选择。

TL; DR:是否有理由不使用Array.Includes而不是仅包含===语句的OR链

1 个答案:

答案 0 :(得分:1)

第三个选项是

const value = someMathematicalExpression;
value === 0 || value === 1 || value === -1 || value === 11 || ...

仅对someMathematicalExpression进行一次重要评估。它可能也比includes更快,因为它可以使用短路电路,并且不需要评估整个解决方案,但是编译器可以优化它,因此除非有这样的关系,否则无关紧要。仍然需要进行基准测试的性能瓶颈。 (在这种情况下,您可能还需要考虑尝试进行静态Sethas检查)

因此,通过不重复数学表达式来保持代码干燥,无论您发现数组+ includes方法还是比较链更易读,都由您个人判断。当然,includes还有一个缺点,那就是它需要ES6 +环境,这可能对您来说都没有关系。