我是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" ) {
?
答案 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
}
答案 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}) {