在JavaScript / jQuery中,是否有一种更短的方法可以编写在同一个测试变量上具有许多OR的“if”语句

In JavaScript/jQuery, is there a shorter way of writing an 'if' statement with many OR's on the same tested variable?

本文关键字:变量 测试 同一个 许多 语句 if OR 是否 JavaScript 方法 一种      更新时间:2023-09-26

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

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

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

由于x在现实生活中的示例中会更长,因此我想找到一个快捷方式来枚举所有这些值,一个接一个,而不是每次都写变量的名称)

我该怎么做?

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

if(jQuery.inArray(x,[1,15,125,150]) > -1)
{
}

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

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

不过,IE8 及更早版本不支持此功能。请参阅 MDN 文档,其中包括旧浏览器的解决方法。

您是否考虑过大小写切换语句?不是很花哨,但未被充分利用且易于阅读,并且可以移植到大多数其他编程语言:

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

如果你担心性能,我运行了一个jsPerf测试用例,这种技术是Chrome中最快的。

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

var items = {1:true, 15:true, 25:true, 150:true};
if (items[x] === true) {
    // Found x in items
}

对于大量项目,映射是一种比线性搜索数组的其他示例更有效的查找机制。

我还发现维护的代码比多行if语句简单得多。

UnderscoreJS有一个.any函数:

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

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