最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript OR in an IF statement - Stack Overflow

programmeradmin3浏览0评论

I am trying to make an if statement in javascript that will do something if the variable does not equal one of a few different things. I have been trying many different variations of the OR operator, but I cant get it to work.

 if(var != "One" || "Two" || "Three"){
    // Do Something
    }

Any ideas? Thanks!

Update:

I have tried this before:

 if(var != "One" || var != "Two" || var != "Three"){
    // Do Something
    }

For some reason it does not work. My variable is pulling information from the DOM i dont know if that would effect this.

Actual Code

// 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
        }

I am trying to make an if statement in javascript that will do something if the variable does not equal one of a few different things. I have been trying many different variations of the OR operator, but I cant get it to work.

 if(var != "One" || "Two" || "Three"){
    // Do Something
    }

Any ideas? Thanks!

Update:

I have tried this before:

 if(var != "One" || var != "Two" || var != "Three"){
    // Do Something
    }

For some reason it does not work. My variable is pulling information from the DOM i dont know if that would effect this.

Actual Code

// 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
        }
Share Improve this question edited Jan 6, 2010 at 6:08 Chris Bier asked Jan 6, 2010 at 6:01 Chris BierChris Bier 14.5k19 gold badges68 silver badges106 bronze badges 1
  • 5 as a side note: var is a keyword, not a variable name – cobbal Commented Jan 6, 2010 at 6:07
Add a ment  | 

6 Answers 6

Reset to default 8

Your expression is always true, you need:

if(!(myVar == "One" || myVar == "Two" || myVar == "Three")) { 
  // myVar is not One, Two or Three
} 

Or:

if ((myVar != "One") && (myVar != "Two") && (myVar != "Three")) {
  // myVar is not One, Two or Three
}

And, for shortness:

if (!/One|Two|Three/.test(myVar)) {
  // myVar is not One, Two or Three
}
// Or:
if (!myVar.match("One|Two|Three")) {
  // ...
}

More info:

  • De Morgan's Laws

Edit: If you go for the last approaches, since the code you posted seems to be part of a loop, I would remend you to create the regular expression outside the loop, and use the RegExp.prototype.test method rather than String.prototype.match, also you might want to care about word boundaries, i.e. "noOne" will match "One" without them...

Assuming you mean "val does not equal One or Two or Three" then De Morgan's Theorem applies:

if ((val != "One") && (val != "Two") && (val != "Three")) {
  // Do something...
}

For a shorter way to do it, try this format (copied from http://snook.ca/archives/javascript/testing_for_a_v):

if(name in {'bobby':'', 'sue':'','smith':''}) { ... }

or

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']) ) { ... }

The method mentioned by Mike will work fine for just 3 values, but if you want to extend it to n values, your if blocks will rapidly get ugly. Firefox 1.5+ and IE 8 have an Array.indexOf method you can use like so:

if(["One","Two","Test"].indexOf(myVar)!=-1)
{
    //do stuff
}

To support this method on IE<=7, you could define a method called Array.hasElement() like so:

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

And then call it like so:

if(!["One","Two","Three"].hasElement(myVar))
{
    //do stuff
}

Note: only tested in Firefox, where this works perfectly.

In addition to expanding the expression into three clauses, I think you'd better name your variable something other than var. In JavaScript, var is a keyword. Most browsers aren't going to alert you to this error.

Alternate way using an array:

var selected = ['Silverware', 'Gold Coins', 'Silver Coins'];
if ( selected.indexOf( el.value ) != -1 ) {
   // do something if it *was* found in the array of strings.
}

Note: indexOf isnt a native method, grab the snippet here for IE:

  • https://developer.mozilla/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf
发布评论

评论列表(0)

  1. 暂无评论