Почему в JavaScript нет логического xor? - PullRequest
172 голосов
/ 27 декабря 2010

Почему в JavaScript нет логического xor?

Ответы [ 15 ]

2 голосов
/ 08 августа 2013

В приведенной выше функции xor это приведет к SIMILAR результату, поскольку логический xor не совсем логический xor, означает, что он приведет к "false для равных значений" и "true для различные значения " с учетом соответствия типа данных.

Эта функция xor будет работать как фактический xor или логический оператор , что означает, что она будет иметь значение true или false в соответствии с передаваемыми значениями truey или false . Используйте в соответствии с вашими потребностями

function xor(x,y){return true==(!!x!==!!y);}

function xnor(x,y){return !xor(x,y);}
1 голос
/ 25 февраля 2019

Вы используете тот факт, что cond1 xor cond2 эквивалентно cond1 + cond 2 == 1:

let ops = [[false, false],[false, true], [true, false], [true, true]];

function xor(cond1, cond2){
  return cond1 + cond2 == 1;
}

for(op of ops){
  console.log(`${op[0]} xor ${op[1]} is ${xor(op[0], op[1])}`)
}
0 голосов
/ 08 января 2019

In Typescript (+ меняется на числовое значение):

value : number = (+false ^ +true)

Итак:

value : boolean = (+false ^ +true) == 1
0 голосов
/ 15 ноября 2016

Причина отсутствия логического XOR (^^) в том, что в отличие от && и || это не дает никакого ленивого логического преимущества. Это состояние обоих выражений справа и слева должно быть оценено.

0 голосов
/ 18 мая 2013

Попробуйте это коротко и легко понять

function xor(x,y){return true==(x!==y);}

function xnor(x,y){return !xor(x,y);}

Это будет работать для любого типа данных

...