39

考虑以下:

var a = 'jesus';

if(a == 'something' || a == 'nothing' || a=='anything' || a=='everything'){
   alert('Who cares?');
}

有没有办法让这个更短?

Javascript中有什么类似的东西if (a=='bbb'||'ccc')吗?

另外,jQuery 能帮上忙吗?

4

8 回答 8

58

你可以用这个...

if (["something", "nothing", "anything", "everything"].includes(a)) {
   alert('Who cares?');
}

如果您坚持使用较旧的浏览器支持...

if (["something", "nothing", "anything", "everything"].indexOf(a) > -1) {
   alert('Who cares?');
}

您还将它标记为 jQuery,因此如果您需要支持没有 . 的旧浏览器Array.prototype.indexOf(),您可以使用$.inArray().

于 2012-12-06T04:44:31.943 回答
31

使用正则表达式:

if (/^(something|nothing|anything|everything)$/.exec('jesus')) alert('Who cares?');​

或相反:

/^(something|nothing|anything|everything)$/.exec('jesus')||alert('Who cares?');​

[更新] 更短 ;-)

if (/^(some|no|any|every)thing$/.exec('jesus')) alert('Who cares?');​
于 2012-12-06T05:09:30.063 回答
18

您可以将选项放在数组中并使用 jQuery$.inArray()或 javascrptindexOf()搜索数组

纯 JavaScript  

现场演示

var a = 'anything';
arr = ['something', 'nothing', 'anything', 'everything'];
if(arr.indexOf(a) != -1)
    alert("condition met");    
else
    alert("condition not met");    

使用 jQuery

现场演示

var a = 'jesus';
arr = ['something', 'nothing', 'anything', 'everything'];

if($.inArray(a, arr) != -1) // With jQuery
    alert("condition met");    
else
    alert("condition not met");    
于 2012-12-06T04:44:40.173 回答
10

使用 ES7,您可以使用Array.prototype.includes甚至比 indexOf 更短的表示法,这已经在每个现代浏览器中实现。

这是示例用法:

if (['hero', 'anything', 'everything'].includes(me)) {
    alert('Who cares?');
}

还有来自 Mozilla的polyfill 。

于 2016-02-24T18:26:21.807 回答
8

试试这个:

如果您想检查除Jesus以外的其他单词,请尝试以下操作,

if(a != "jesus"){
   alert('Who cares?');
}

如果您想检查特定单词,请尝试以下操作,

var check_arrays = ['something','nothing', 'anything', 'everything'];
if(checkThis(a)){
   alert('Who cares?');
}

function checkThis(a)
{
   for(i=0;i<check_arrays.length;i++)
   {
      if(check_arrays[i] == a)
      return true;
   }
   return false;
}
于 2012-12-06T04:45:05.727 回答
4

可能使用 switch 而不是 if:

var a = 'jesus';
switch (a){
    case 'something':
    case 'nothing' :
    case 'anything':
    case 'everything':
   alert('Who cares?');
   break;
}
于 2012-12-06T04:48:02.040 回答
2

使用对象字面量:

var all={something:1,nothing:1,anything:1,everything:1};
if (all.hasOwnProperty('jesus')) alert('Who cares?');​

我想说这是最简洁的通用跨浏览器表达式(好吧,只要目标是比较字符串)。它也非常灵活,因为您可以轻松添加或删除属性:

all.mything=1;
delete all.nothing;
于 2012-12-06T18:40:01.617 回答
0

我认为没有简单的方法可以做到这一点。但是你可以写一个函数in_array,你可以在任何你需要的地方使用它

Array.prototype.in_array = function(p_val) {
    for(var i = 0, l = this.length; i < l; i++) {
        if(this[i] == p_val) {
            return true;
        }
    }
    return false;
}

var v_array = [ 'something','nothing', 'anything', 'everything'];

var a = "jesus";

if(v_array.in_array(a)){
    alert('Who cares?');
}
于 2012-12-06T04:49:03.000 回答