为什么JavaScript中没有逻辑异或?
当前回答
如何将结果int转换为带有双重否定的bool ?不是很漂亮,但是很紧凑。
Var state1 = false, State2 = true; var A = state1 ^ state2;//将变成1 var B = !!(state1 ^ state2);//将变为true console.log(一个); console.log (B);
其他回答
JavaScript的祖先可以追溯到C语言,而C语言没有逻辑异或运算符。主要是因为它没什么用。位异或非常有用,但在我多年的编程生涯中,我从未需要过逻辑异或。
如果你有两个布尔变量,你可以用:
if (a != b)
你可以用两个任意变量!将它们强制转换为布尔值,然后使用相同的技巧:
if (!a != !b)
这是相当晦涩的,当然值得评论。实际上,你甚至可以在这里使用按位的XOR操作符,尽管这对我来说太聪明了:
if (!a ^ !b)
在Typescript中(+变为数值):
value : number = (+false ^ +true)
So:
value : boolean = (+false ^ +true) == 1
有……类:
if( foo ? !bar : bar ) {
...
}
或者更容易读:
if( ( foo && !bar ) || ( !foo && bar ) ) {
...
}
为什么?不晓得。
因为javascript开发人员认为这是不必要的,因为它可以用其他已经实现的逻辑运算符来表示。
你也可以只用nand,就是这样,你可以从它得到所有其他可能的逻辑运算。
我个人认为它有历史原因,从基于c的语法语言驱动,据我所知,xor不存在或至少非常罕见。
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])}”) }
没有逻辑异或(^^)的原因是,与&&和||不同,它没有提供任何惰性逻辑优势。也就是左右两边表达式的状态都要求值。