哪个更好?我担心样式/可读性和性能。
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链
答案 0 :(得分:1)
第三个选项是
const value = someMathematicalExpression;
value === 0 || value === 1 || value === -1 || value === 11 || ...
仅对someMathematicalExpression
进行一次重要评估。它可能也比includes
更快,因为它可以使用短路电路,并且不需要评估整个解决方案,但是编译器可以优化它,因此除非有这样的关系,否则无关紧要。仍然需要进行基准测试的性能瓶颈。 (在这种情况下,您可能还需要考虑尝试进行静态Set
和has
检查)
因此,通过不重复数学表达式来保持代码干燥,无论您发现数组+ includes
方法还是比较链更易读,都由您个人判断。当然,includes
还有一个缺点,那就是它需要ES6 +环境,这可能对您来说都没有关系。