我试图在javascript中创建一个if语句,如果变量不等于几个不同的东西之一就会做某事。我一直在尝试OR运算符的许多不同变体,但我无法让它工作。
if(var != "One" || "Two" || "Three"){
// Do Something
}
有什么想法吗?谢谢!
更新
我之前尝试过这个:
if(var != "One" || var != "Two" || var != "Three"){
// Do Something
}
由于某种原因,它不起作用。我的变量是从DOM中提取信息我不知道是否会影响这个。
实际代码
// Gets Value of the Field (Drop Down box)
var itemtype = document.forms[0].elements['itemtype' + i];
if(itemtype.value != "Silverware" || itemtype.value != "Gold Coins" || itemtype.value != "Silver Coins"){
// Do Something
}
答案 0 :(得分:8)
你的表达总是正确的,你需要:
if(!(myVar == "One" || myVar == "Two" || myVar == "Three")) {
// myVar is not One, Two or Three
}
或者:
if ((myVar != "One") && (myVar != "Two") && (myVar != "Three")) {
// myVar is not One, Two or Three
}
而且,为了简短:
if (!/One|Two|Three/.test(myVar)) {
// myVar is not One, Two or Three
}
// Or:
if (!myVar.match("One|Two|Three")) {
// ...
}
更多信息:
编辑:如果您选择最后一种方法,因为您发布的代码似乎是循环的一部分,我建议您在外面创建正则表达式循环,并使用RegExp.prototype.test
方法而不是String.prototype.match
,您也可能想要关心字边界,即“noOne”将匹配“One”而没有它们。
答案 1 :(得分:6)
假设你的意思是“val不等于一,二或三”,那么De Morgan的定理适用:
if ((val != "One") && (val != "Two") && (val != "Three")) { // Do something... }
答案 2 :(得分:0)
要想采用更短的方法,请尝试以下格式(从http://snook.ca/archives/javascript/testing_for_a_v复制):
if(name in {'bobby':'', 'sue':'','smith':''}) { ... }
或
function oc(a)
{
var o = {};
for(var i=0;i<a.length;i++)
{
o[a[i]]='';
}
return o;
}
if( name in oc(['bobby', 'sue','smith']) ) { ... }
答案 3 :(得分:0)
Mike提到的方法只适用于3个值,但如果要将其扩展到n
个值,则if
块会很快变得难看。 Firefox 1.5+和IE 8有一个Array.indexOf
方法,您可以这样使用:
if(["One","Two","Test"].indexOf(myVar)!=-1)
{
//do stuff
}
要在IE&lt; = 7上支持此方法,您可以像这样定义一个名为Array.hasElement()的方法:
Array.prototype.hasElement = function hasElement(someElement)
{
for(var i=0;i<this.length;i++)
{
if(this[i]==someElement)
return true;
}
return false;
}
然后这样称呼它:
if(!["One","Two","Three"].hasElement(myVar))
{
//do stuff
}
注意:仅在Firefox中进行测试,此操作非常有效。
答案 4 :(得分:-1)
使用数组的替代方式:
var selected = ['Silverware', 'Gold Coins', 'Silver Coins'];
if ( selected.indexOf( el.value ) != -1 ) {
// do something if it *was* found in the array of strings.
}
注意:indexOf isnt a native method, grab the snippet here for IE:
答案 5 :(得分:-1)
除了将表达式扩展为三个子句之外,我认为除了var
之外,你还应该更好地命名变量。在JavaScript中,var
是关键字。大多数浏览器都不会提醒您出现此错误。