更好的检查一堆条件的方法

时间:2013-07-26 12:55:39

标签: javascript

我是javascript的新手,仍然接受语言的细微差别。

我有一段代码,我必须检查特定变量的一组条件。

if (a=="MAIN_DOMAINNAME" || a=="DOMAIN_SERIAL" || a=="DOMAIN_REFRESH" || a=="DOMAIN_RETRY" || a=="DOMAIN_EXPIRE" || a=="DOMAIN_NEGTTL" || a=="MAIN_NS") {

是否有更好的方法来执行此条件检查,例如:

if a is one of ("DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH" ) {

5 个答案:

答案 0 :(得分:13)

假设使用相对较新的浏览器,您可以使用Array.indexOf (spec)

if (["DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH"].indexOf(a) !== -1)

注意 - 您可以轻松地为旧浏览器填充它(请参阅the mdn link了解如何)。

答案 1 :(得分:2)

正则表达式会更短,适用于所有地方:

if ( /^(MAIN_DOMAINNAME|DOMAIN_SERIAL|DOMAIN_REFRESH|..)$/.test(a) ) {
   // do stuff
}

FIDDLE

答案 2 :(得分:1)

var ars = ["DOMAIN_SERIAL", "MAIN_DOMAINNAME", "DOMAIN_REFRESH"];
if(ars.some(function(ar){ return a === ar; })){
     // do smth
}

答案 3 :(得分:1)

应该提及switch语句,因为它应该与问题中给出的示例一起正常工作。

switch(a) {
  case('MAIN_DOMAINAME'):
  case('DOMAIN_SERIAL'):
  case('DOMAIN_REFRESH'):
  case('DOMAIN_RETRY'):
    console.log('Go wild.');
  break;
}

不像其他答案一样轻巧,但它可读并匹配(a === b)。

答案 4 :(得分:0)

我更喜欢adeneo已经提供的正则表达式解决方案,但是如果你想要与

相匹配的东西
if a is one of (...

从问题的措辞中你可以做到这一点:

if (a in list("MAIN_DOMAINNAME", "DOMAIN_SERIAL", "DOMAIN_REFRESH", "DOMAIN_RETRY")) {
    // do something                 (rest of list omitted to avoid scrolling)
}

通过提供帮助函数将列表转换为对象:

function list() {
   var o={}, i;
   for (i=0; i < arguments.length; i++) o[arguments[i]] = true;
   return o;
}

当然你可以省略辅助函数并只使用一个对象文字,但那很难看:

if (a in {"MAIN_DOMAINNAME":1, "DOMAIN_SERIAL":1, "DOMAIN_REFRESH":1}) {