缩短JS if或statement

时间:2011-02-17 17:36:50

标签: javascript

无论如何,在Javascript:if (x == 1 || x == 2 || x == 3 || x == 4)中将这样的内容简化为if (x == (1 || 2 || 3 || 4))之类的内容吗?

5 个答案:

答案 0 :(得分:6)

您可以使用Array.indexOf

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

您还可以将对象用作某种哈希映射:

//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 :(得分:2)

如果您的案例并不那么简单,那么:

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

您可以使用array and indexOf

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

请注意,indexOf可能需要重新实施。

答案 2 :(得分:1)

编写一个将数组作为输入并返回true / false或某种数组搜索的函数。维护/其他开发人员很难阅读。它会明显变慢。所以只需坚持使用语义正确的更长版本。

另外,查看是否可以显着缩短任何内容的好方法是通过关闭编译器运行它,看看它是什么。

答案 3 :(得分:1)

怎么样:

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

答案 4 :(得分:0)

你可以写一个函数:

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

然后你可以说:

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

(是否使用“===”或“==”取决于您想要的确切语义。)