为什么JavaScript中没有逻辑异或?
当前回答
在Typescript中(+变为数值):
value : number = (+false ^ +true)
So:
value : boolean = (+false ^ +true) == 1
其他回答
Javascript有一个按位的异或运算符:^
var nb = 5^9 // = 12
你可以将它与布尔值一起使用,它会将结果作为0或1(你可以将其转换回布尔值,例如result = !!(op1 ^ op2)。但正如John所说,它等价于result = (op1 != op2),这更清楚。
转换为布尔值,然后执行异或,比如-
!!a ^ !!b
没有逻辑异或(^^)的原因是,与&&和||不同,它没有提供任何惰性逻辑优势。也就是左右两边表达式的状态都要求值。
在Typescript中(+变为数值):
value : number = (+false ^ +true)
So:
value : boolean = (+false ^ +true) == 1
JavaScript的祖先可以追溯到C语言,而C语言没有逻辑异或运算符。主要是因为它没什么用。位异或非常有用,但在我多年的编程生涯中,我从未需要过逻辑异或。
如果你有两个布尔变量,你可以用:
if (a != b)
你可以用两个任意变量!将它们强制转换为布尔值,然后使用相同的技巧:
if (!a != !b)
这是相当晦涩的,当然值得评论。实际上,你甚至可以在这里使用按位的XOR操作符,尽管这对我来说太聪明了:
if (!a ^ !b)