3 способа получить XOR в Javascript

В Javascript нет встроенной логической функции исключающего или (XOR). 
Напомню, что исключающее или работает также как или, за исключением того, что она принимает значение ЛОЖЬ, когда оба операнда имеют значение ИСТИНА.

Первый способ, выглядит очень наглядно, можно прочитать как «когда один операнд ИСТИНА, а второй ЛОЖЬ или наоборот»:

if ((a && !b) || (!a && b))
{
...
}

Более короткий вариант (на одну операцию) отсекает от «или» исключительную ситуацию.

if((a || b) && !(a && b))
{
...
}

Третий способ основан на тернарном операторе a?b:c, который возвращает b если a истинно, и c в противном случае.

if(a ? !b : b) {
  ...
}

С ним нужно быть осторожней — в условном операторе он отлично работает, но в случае если вы хотите записать значение в переменную, и a будет ложью, а b, к примеру строкой, то переменная получит не булево значение, а оригинальное значение переменной b, можете взять это выражение дополнительно в функцию Boolean().

Кроме того автор оригинальной статьи рекомендует обратить внимание на случай, когда a и b не переменные или литералы, а выражения — в таком случае в любом из примеров они будут подсчитываться больше одного раза, но я считаю что тема предварительных расчетов к данной статье не относится.

Если часто нужен XOR есть смысл инкапсулировать его в функцию.

Оригинальный источник.

  • Alone_MonaX

    return (a!=b) — слишком долгий? Интересно

  • Alone_MonaX

    а, понял.

    просто у меня этот пример рабочий, но он не универсален)

  • В Javascript есть встроенная логическая функция исключающего или (XOR).

    > 1^1

    0

    > 1^0

    1

    > 0^1

    1

    > 0^0

    0

    • ex

      ^ — это побитовый XOR.

      • Denis

        ну значит надо всего лишь привести к булевому типу (0 |1) и затем выполнить побитовый XOR 

        (!a)^(!b)