Я проверяю переменную, скажем, foo, чтобы получить равенство значений. Например,

if( foo == 1 || foo == 3 || foo == 12 ) {
    // ...
}

Дело в том, что для такой тривиальной задачи это довольно много кода. Я придумал следующее:

if( foo in {1: 1, 3: 1, 12: 1} ) {
    // ...
}

, но это не совсем мне нравится, потому что я должен дать избыточные значения элементам в объекте.

Кто-нибудь знает достойный способ проверки на равенство нескольких значений?

Вы можете использовать массив и indexOf:

if ([1,3,12].indexOf(foo) > -1)

В ECMA2016 вы можете использовать метод Я пишу пример приложения, используя angularjs. я получил ошибку, упомянутую ниже в браузере Chrome. & # xA ; & # xA ; Ошибка & # xD ; & # xA ; Ошибка: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactContr .. . Это самый чистый способ, который я видел. (Поддерживается всеми основными браузерами, кроме IE (Polyfill находится в ссылке)

if([1,3,12].includes(foo)) {
    // ...
}

Использование В ответах я получил следующее:

Object.prototype.in = function() {
    for(var i=0; i<arguments.length; i  )
       if(arguments[i] == this) return true;
    return false;
}

Он может быть вызван так:

if(foo.in(1, 3, 12)) {
    // ...
}

Мы только что выпустили не работает в случае, когда длина исходной строки на единицу меньше длины строки поиска и строка поиска не найдена:

/foo|bar|something/.test(str);

Если быть более точным, он проверит точную строку, но опять же сложнее для простого теста на равенство:

/^(foo|bar|something)$/.test(str);

Определенное событие jQuery, когда весь HTML был загружен. if(foo in L(10,20,30)) если вы определяете L как

var L = function()
{
    var obj = {};
    for(var i=0; i<arguments.length; i  )
        obj[arguments[i]] = null;

    return obj;
};
var a = [1,2,3];

if ( a.indexOf( 1 ) !== -1 ) { }

Обратите внимание, что indexOf отсутствует в основном ECMAScript. Вам понадобится фрагмент кода для IE и, возможно, других браузеров, которые не поддерживают Array.prototype.indexOf.

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n)
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k  )
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

Это легко расширяется и читается:

switch (foo) {
    case 1:
    case 3:
    case 12:
        // ...
        break

    case 4:
    case 5:
    case 6:
        // something else
        break
}

Но не обязательно проще :)

Мне понравился принятый ответ, но я подумал, что было бы неплохо также включить в него массивы, поэтому я расширил его до следующего:

Object.prototype.isin = function() {
    for(var i = arguments.length; i--;) {
        var a = arguments[i];
        if(a.constructor === Array) {
            for(var j = a.length; j--;)
                if(a[j] == this) return true;
        }
        else if(a == this) return true;
    }
    return false;
}

var lucky = 7,
    more = [7, 11, 42];
lucky.isin(2, 3, 5, 8, more) //true

Вы можете удалить приведение типов, изменив ===== Глядя на вывод

Если у вас есть доступ к Underscore, вы можете использовать следующее:

if (_.contains([1, 3, 12], foo)) {
  // ...
}

contains, используемый также и в Lodash (до V4), теперь вы должны использовать includes

if (_.includes([1, 3, 12], foo)) {
  handleYellowFruit();
}

также, поскольку значения, для которых вы проверяете результат, являются уникальными Вы можете использовать Set.prototype.has () также.

var valid = [1, 3, 12];
var goodFoo = 3;
var badFoo = 55;

// Test
console.log( new Set(valid).has(goodFoo) );
console.log( new Set(valid).has(badFoo) );

Я просто использовал функцию jQuery inArray и массив значений для этого:

myArr = ["A", "B", "C", "C-"];

var test = $.inArray("C", myArr)  
// returns index of 2 returns -1 if not in array

if(test >= 0) // true

Для потомков вы можете использовать регулярные выражения в качестве альтернативы. Довольно неплохая поддержка браузера (см. https://developer.mozilla.org / en-US / docs / Web / JavaScript / Reference / Global_Objects / String / match # Browser_compatibility С чем вы столкнулись

Ссылки на категории персонажей:

if (foo.toString().match(/^(1|3|12)$/)) {
    document.write('Regex me IN<br>');
} else {
    document.write('Regex me OUT<br>');
}