Javascript OR在IF语句中

时间:2010-01-06 06:01:44

标签: javascript

我试图在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
        }

6 个答案:

答案 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是关键字。大多数浏览器都不会提醒您出现此错误。