为什么JavaScript中没有逻辑异或?


当前回答

Boolean的一行代码:

if (x ? !y : y) { do something cool }

其他回答

在Typescript中(+变为数值):

value : number = (+false ^ +true)

So:

value : boolean = (+false ^ +true) == 1

查看:

JavaScript中的逻辑异或

你可以这样模仿它:

if( ( foo && !bar ) || ( !foo && bar ) ) {
  ...
}

Cond1 xor cond2等价于Cond1 + cond2 == 1:

证明如下:

Let ops = [[false, false],[false, true], [true, false],[true, true]]; 函数xor(cond1, cond2){ 返回cond1 + cond2 == 1; } For (op of ops){ console.log(“$ {op [0]} xor $ {op [1]} $ {xor (op [0], op[1])}”) }

两个布尔值的异或仅仅是它们是否不同,因此:

Boolean(a) !== Boolean(b)

没有逻辑异或(^^)的原因是,与&&和||不同,它没有提供任何惰性逻辑优势。也就是左右两边表达式的状态都要求值。