为什么JavaScript中没有逻辑异或?


当前回答

两个布尔值的异或仅仅是它们是否不同,因此:

Boolean(a) !== Boolean(b)

其他回答

嘿,我找到了这个解决方案,在JavaScript和TypeScript上制作和XOR。

if( +!!a ^ +!!b )
{
  //This happens only when a is true and b is false or a is false and b is true.
}
else
{
  //This happens only when a is true and b is true or a is false and b is false
}

是的,按照下面的步骤做。 假设您正在处理布尔值A和B,那么可以使用以下代码在JavaScript中计算XOR B值

var xor1 = !(a === b);

上一行也相当于下面一行

var xor2 = (!a !== !b);

就我个人而言,我更喜欢xor1,因为我需要输入更少的字符。我相信xor1也更快。它只是进行了两次计算。Xor2执行三次计算。

视觉讲解…阅读下面的表格(0代表假,1代表真),比较第3列和第5列。

(a === b):

| A | B | A XOR B | A === B | !(A === B) |
------------------------------------------
| 0 | 0 |    0    |    1    |      0     |
| 0 | 1 |    1    |    0    |      1     |
| 1 | 0 |    1    |    0    |      1     |
| 1 | 1 |    0    |    1    |      0     |
------------------------------------------

享受。

查看:

JavaScript中的逻辑异或

你可以这样模仿它:

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

有……类:

if( foo ? !bar : bar ) {
  ...
}

或者更容易读:

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

为什么?不晓得。

因为javascript开发人员认为这是不必要的,因为它可以用其他已经实现的逻辑运算符来表示。

你也可以只用nand,就是这样,你可以从它得到所有其他可能的逻辑运算。

我个人认为它有历史原因,从基于c的语法语言驱动,据我所知,xor不存在或至少非常罕见。

在Typescript中(+变为数值):

value : number = (+false ^ +true)

So:

value : boolean = (+false ^ +true) == 1