【问题标题】:Shorten JS if or statement [duplicate]缩短JS if或语句[重复]
【发布时间】:2011-02-17 17:36:50
【问题描述】:

有没有办法在 Javascript 中将类似这样的内容:if (x == 1 || x == 2 || x == 3 || x == 4) 缩短为类似 if (x == (1 || 2 || 3 || 4)) 的内容?

【问题讨论】:

  • 如果您正在寻找与您发布的内容相似的语法,那么没有。您应该考虑到任何缩短它的迂回方式都会对性能造成影响。
  • 以数字为例,所以如果我比较字符串,使用“if(x >0 && x

标签: javascript


【解决方案1】:

你可以使用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')

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

【讨论】:

  • 有时 "==" 很有用,但你可能是对的,"===" 应该是 JavaScript 程序员自动键入的内容 :-)
  • 谈到强制,对象初始化器做了三次:-P
【解决方案2】:

如果你的案例不是那么简单的表达方式:

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

你可以使用array and indexOf:

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

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

【讨论】:

  • 去掉空格后,实际上长了1个字符(指indexOf(),但是如果匹配的列表更长,它会更短。我想这取决于实际代码。
【解决方案3】:

必须编写一个函数,该函数将数组作为输入并返回真/假,或者某种数组搜索。很难维护/其他开发人员阅读。而且它会明显变慢。因此,请坚持使用语义正确的较长版本。

查看是否可以显着缩短任何内容的好方法是通过关闭编译器运行它并查看结果。

【讨论】:

  • 我支持这个。将这样的复杂检查封装到一个函数中以更好地传达含义通常是一个好主意。
【解决方案4】:

怎么样:

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

【讨论】:

  • 我是这么想的,但后来我意识到约翰将其作为一个简化的示例而不是可以说的案例研究来呈现。
【解决方案5】:

你可以写一个函数:

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)) { /* ... */ }

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

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多