据我所查,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
相匹配,但我不确定这是否适用于所有情况。
const xor = (a, b) => a && !b || !a && b
,然后只需使用它xor(type === 'configuration', type2 === 'setup')
。这样做简单、可重用、易于维护和易于阅读。不像位运算符和长的逻辑表达式。 - Yury Tarabanko