在JavaScript/jQuery中,是否有一种较短的方法来编写';如果';具有多个或';是在同一个被测变量上吗?

在JavaScript/jQuery中,是否有一种较短的方法来编写';如果';具有多个或';是在同一个被测变量上吗?,javascript,jquery,Javascript,Jquery,我知道要声明多个变量,有一个快捷方式,比如var x=1,y=2,z=3 现在,如果我有一个if语句,其中我测试一个变量,但测试许多值,如下所示: if (x==1 || x==15 || x==25 || x==150){ } 由于在实际示例中,x将要长得多,因此我想找到一种快捷方式,一个接一个地枚举所有这些值,而不必每次都写入变量的名称。) 我该怎么做呢?您可以使用一个可能值的数组,并测试变量是否出现在其中 if ([1, 15, 25, 150].indexOf(x) > -1)

我知道要声明多个变量,有一个快捷方式,比如
var x=1,y=2,z=3

现在,如果我有一个
if
语句,其中我测试一个变量,但测试许多值,如下所示:

if (x==1 || x==15 || x==25 || x==150){

}
由于在实际示例中,
x
将要长得多,因此我想找到一种快捷方式,一个接一个地枚举所有这些值,而不必每次都写入变量的名称。)


我该怎么做呢?

您可以使用一个可能值的数组,并测试变量是否出现在其中

if ([1, 15, 25, 150].indexOf(x) > -1) {

但IE8和更早版本不支持这一点。请参阅其中包括旧浏览器的解决方案。

您是否考虑过case switch语句?不是很花哨,但使用不足且易于阅读,并且可移植到大多数其他编程语言:

switch (x) {
case 1:
case 15:
case 25:
case 150:
  // do something
  break;
}

如果您关心性能,我运行了一个浏览器,这是Chrome中速度最快的技术。

您可以使用inArray并执行此操作(跨浏览器兼容)


如果要检查的项目很多,则地图(使用JavaScript对象)可以整洁,并且可以在所有浏览器中工作:

var items = {1:true, 15:true, 25:true, 150:true};
if (items[x] === true) {
    // Found x in items
}
对于较大数量的项,映射是比线性搜索数组的其他示例更有效的查找机制

我还发现,与多行
if
语句相比,它的代码维护要简单得多。

有一个。任意函数:

var testArray = [1,15,125,150];
if (_.any(testArray, function (item) { return item === x; })) {
  // do stuff
}

该库具有许多处理数组的强大功能。

我猜您是想比较这些值,而不是赋值。var x=my.really.long.name.I.dont.want.to.continue.to.rewrite;嗨,谢谢你。是的,我可以使用
var x=..
,但我只是想看看if语句是否有语法快捷方式。注意——如果性能是您关心的问题,那么最好还是坚持原来的
if(x==1)| |……)方法。感谢Blazemonger的链接。我将使用它来测试我的代码。RegardsHi,非常感谢您的回复。我正在调查。然而,这并不能真正实现同样的目标。if条款规定,只有在至少一个条件为真的情况下,才能执行以下代码。switch语句将完全执行不同的代码,除非将相同的语句复制到每个案例中,从而使切换变得更长、效率更低。我不确定你在说什么,但是:你放置在
//do something
位置的任何内容都将在其上方的所有
案例中运行(但在最后一个
中断
)下面…抱歉,由于这是一个例子,我没有注意到案例失败。我想这就是为什么它不是一个普遍推荐的方法()。我只是指逻辑析取()。这是真的,但不幸的是,这个函数的命名太糟糕了,以至于你都忘记了它不返回布尔值。而且,每当我键入
。inArray
时,我也会忘记它。嗨,谢谢你的回答。这对旧版本的IE也有效吗?如果是,我不明白为什么仍然使用indexOf…@eric01,因为你可以使用使其在IE中工作并获得一个合理的API。@Blazemonger-我重写了您的编辑,因为在这种情况下,
==true
很重要,因为该对象可能有其他属性或方法,我不希望此比较能够匹配。例如,如果x是“键”或“创建”或者任何与javascript对象上的现有方法或属性匹配的字符串,则您的编辑将允许通过比较,但在
===true
的情况下不会通过。
var testArray = [1,15,125,150];
if (_.any(testArray, function (item) { return item === x; })) {
  // do stuff
}