Javascript中的异或运算符用于检查是否等于某个值

3

据我所查,javascript没有XOR运算符。

然而,可以使用以下方法-

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

如果foo和bar是布尔值,那么这很清楚。但是XOR是否可以用来检查不同类型的表达式?例如,如果我想将一个值与另一个值进行比较,那么 -

if (type === 'configuration' XOR type2 === 'setup') { ... }

是否会转化为像下面这样的东西 -

if ( (type === 'configuration' && type2 !== 'setup') || (type !== 'configuration' && type2 === 'setup' ) ) { ... } 还是会有所不同?

这会产生以下结果 -

type = 'configuration' && type2 = 'setup': false type = 'configurations' && type2 = 'setup': true type = 'configuration' && type2 = 'setups': true type = 'configurations' && type2 = 'setups': false

这与

0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0

相匹配,但我不确定这是否适用于所有情况。


请在此阅读 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators 相关的编程内容。 - Asons
你可以定义 const xor = (a, b) => a && !b || !a && b,然后只需使用它 xor(type === 'configuration', type2 === 'setup')。这样做简单、可重用、易于维护和易于阅读。不像位运算符和长的逻辑表达式。 - Yury Tarabanko
1个回答

5
最简单的逻辑异或运算是:
a !== b

在你的情况下:
if((type === 'configuration') !== (type2 === 'setup'))

在JavaScript中也有一个按位异或(^),它同样适用于布尔值类型强制转换为0/1和反之的情况:

if((type === "configuration") ^ (type2 === "setup"))

嗯,那就是我写的一样的,对吧?^ 看起来是一个很好的解决方案,因为它更短更清晰。它是在特定的 ECMAscript 版本中引入的吗? - Patiss
4
写出易于理解的代码,而不是为了追求代码简短而使用位运算符。除非你确定团队成员们能够一眼看懂位运算符,否则短并不代表更加清晰。请注重代码的可读性。 - CertainPerformance
@jogn 我学习了JS大约5/6年,自那以后一直在使用。 - Jonas Wilms
1
关于Javascript中的异或操作,请参考这篇优秀的文章:http://www.howtocreate.co.uk/xor.html - nevf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接