关于javascript:缩短JS if或statement

Shorten JS if or statement

本问题已经有最佳答案,请猛点这里访问。

在javascript中是否有这样的缩短:if (x == 1 || x == 2 || x == 3 || x == 4)到if(x == (1 || 2 || 3 || 4))


可以使用array.indexof

1
[1,2,3,4].indexOf(x) !== -1

还可以将对象用作某种哈希图:

1
2
3
4
5
//Note: Keys will be coerced to strings so
// don't use this method if you are looking for an object or if you need
// to distinguish the number 1 from the string"1"
my_values = {1:true, 2:true, 3:true, 'foo':true}
my_values.hasOwnProperty('foo')

顺便说一下,在大多数情况下,您应该使用"=="严格相等运算符,而不是==运算符。使用"=="进行比较可能会执行许多复杂的类型强制,有时您会得到令人惊讶的结果。


如果您的案例不那么简单,可以这样表达:

1
if (1 <= x && x <= 4)

您可以使用数组和indexOf

1
if ([1,2,3,4].indexOf(x) > -1)

注意,EDOCX1[1]可能需要重新实施。


怎么样:

1
2
if (x > 0 && x < 5) {
}


如果不编写一个将数组作为输入并返回true/false或某种数组搜索的函数,就不可能。维护/其他开发人员很难阅读。而且速度会慢很多。所以只要坚持语义正确的较长版本。

另外,查看是否有任何东西可以被显著缩短的一个好方法是通过关闭的编译器运行它并查看它的结果。


你可以写一个函数:

1
2
3
4
5
function isAny(x) {
  for (var i = 1; i < arguments.length; ++i)
    if (arguments[i] === x) return true;
  return false;
}

然后你可以说:

1
if (isAny(x, 1, 2, 3, 4)) { /* ... */ }

(使用"=="或"=="取决于您想要的确切语义。)