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