Combining multiple conditions into one in Javascript

How can i shorten this code? I want to return all values except "abc" or "xyz" or "pqr"

return this.value != "abc" && this.value != "xyz"  && this.value != "pqr";
13.10.2009 16:10:49
2 ОТВЕТА
РЕШЕНИЕ

You can use an array:

return ["abc","xyz","pqr"].indexOf(this.value) == -1;

Or an object:

return !({"abc":1,"xyz":1,"pqr":1}).hasOwnProperty(this.value);
1
14.10.2009 06:34:45
surprisingly the first statement gives an error in IE7 but works well in all other browsers
Hitz 13.10.2009 17:01:32
It seems that Internet Explorer has that method not yet implemented in version 7.
Gumbo 13.10.2009 17:11:24
The object scheme does not work. Consider this.value === 'toString'. You can fix it by using hasOwnProperty instead
Mike Samuel 14.10.2009 05:18:38

2 most common ways are:

  1. regex

    /^(abc|xyz|pqr)$/.test(this.value)

  2. object property lookup

    this.value in ({'abc':1,'xyz':1,'pqr':1})

Note that regex-based solution (#1) will most definitely be slower than plain comparison (your version) or property lookup (#2).

Also, remember that property lookup is not very reliable, as it might report false positives for any key that's named the same as any of Object.prototype.* properties (e.g. "toString", "valueOf", etc.)

1
13.10.2009 16:19:20