有没有办法在JavaScript中缩短这样的代码:if (x == 1 || x == 2 || x == 3 || x == 4)
,使它看起来像这样:if (x == (1 || 2 || 3 || 4))
?
有没有办法在JavaScript中缩短这样的代码:if (x == 1 || x == 2 || x == 3 || x == 4)
,使它看起来像这样:if (x == (1 || 2 || 3 || 4))
?
[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')
顺便提一下,在大多数情况下,您应该使用“===”严格相等运算符而不是“==”运算符。使用“==”进行比较可能会进行许多复杂的类型强制转换,有时会得到令人惊讶的结果。
if (1 <= x && x <= 4)
数组和indexOf 方法:
if ([1,2,3,4].indexOf(x) > -1)
indexOf
可能需要重新实现。indexOf()
函数返回的字符串长度多1个字符,但是在匹配项较多时,它会更短。我想这取决于实际的代码。 - user113716这样如何:
if (x > 0 && x < 5) {
}
不写一个以数组为输入并返回true/false或某种数组搜索的函数是不可能的,否则很难维护/其他开发人员阅读。而且速度会明显变慢。所以最好坚持语义上正确但较长的版本。
另外,检查是否有任何可以大幅缩短的方法是将其通过紧凑编译器运行并查看输出结果。
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)) { /* ... */ }
使用 "===" 还是 "==" 取决于您想要的确切语义。