JavaScript:检查变量是否等于两个或更多值的简单方法?

Ada*_*ton 45 javascript comparison

是否有更简单的方法来确定变量是否等于一系列值,例如:

if x === 5 || 6 
Run Code Online (Sandbox Code Playgroud)

而不是像以下那样钝的东西:

if x === 5 || x === 6
Run Code Online (Sandbox Code Playgroud)

Yos*_*shi 71

您可以将数值存储在数组中,并使用以下命令检查数组中是否存在该变量[].indexOf:

if([5, 6].indexOf(x) > -1) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

如果-1返回,则该变量在数组中不存在.

  • 这在IE <9中不起作用.请参阅[MDN的数组#indexOf兼容性部分](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility)以获取代码你可以插入实际上使它在IE中工作.但是,除非你在几个地方使用它,否则使用'a == 1 ||可能会更快 a == 2`. (10认同)
  • 或者,如果您使用的是JS框架,MooTools和Prototype都可以确保Array#indexOf存在.另一方面,jQuery以[`$ .inArray`](http://api.jquery.com/jQuery.inArray/)的形式提供了自己的实现.我不熟悉任何其他框架,但我确信它们都以某种方式包含这些功能. (4认同)
  • 现在我们有 ie ```['a','b'].includes('a')``` (2认同)

zzz*_*Bov 24

取决于你正在进行什么样的测试.如果你有静态字符串,这很容易通过正则表达式检查:

if (/^[56ab]$/.test(item)) {
//-or-
if (/^(foo|bar|baz|fizz|buzz)$/.test(item)) {
    doStuff();
} else {
    doOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

如果你有一小组值(字符串或数字),你可以使用switch:

switch (item) {
case 1:
case 2:
case 3:
    doStuff();
    break;
default:
    doOtherStuff();
    break;
}
Run Code Online (Sandbox Code Playgroud)

如果你有一长串的值,你应该使用一个数组~arr.indexOf(item),或者arr.contains(item):

vals = [1,3,18,3902,...];
if (~vals.indexOf(item)) {
    doStuff();
} else {
    doOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

不幸的Array.prototype.indexOf是,在某些浏览器中不支持.幸运的是,可以使用polyfill.如果你遇到了填充的麻烦Array.prototype.indexOf,你也可以补充一下Array.prototype.contains.

根据您关联数据的方式,您可以将对象中的动态字符串列表存储为其他相关信息的映射:

var map = {
    foo: bar,
    fizz: buzz
}
if (item in map) {
//-or-
if (map.hasOwnProperty(item)) {
    doStuff(map[item]);
} else {
    doOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

in将检查整个原型链,而Object.prototype.hasOwnProperty只检查对象,所以要注意它们是不同的.


Joã*_*lva 16

这很好.如果您有更长的值列表,也许您可​​以使用以下代码:

if ([5,6,7,8].indexOf(x) > -1) {
}
Run Code Online (Sandbox Code Playgroud)


0x4*_*2D2 7

是.您可以使用自己的功能.此示例使用.some:

var foo = [ 5, 6 ].some(function(val) {
     return val === x;
   });

foo; // true
Run Code Online (Sandbox Code Playgroud)

  • 给你一个upsote for .some,这是我以前从未见过的! (4认同)