JavaScript中^=运算符的含义是什么?

6

我正在尝试理解JS中的这个运算符 -

'string' ^= 'string';

但我找不到任何信息。这是比较还是赋值?

谢谢。


如果标题不是那么通用的话,我可能会发现这个重复了 :( - shannoga
2
你的意思是你看到过实际字符串上使用 ^= 吗? - David G
4个回答

7

myVar ^= 5myVar = myVar ^ 5相同。其中,^是按位异或运算符。

假设myVar的值为2

  • 5的二进制表示为: 101
  • 2的二进制表示为: 010

按位异或操作检查两个数字的第一个位并返回 1,0 然后看到 0,1 并返回 1,然后看到 1,0 并返回 1。

因此,111 转换回十进制为 7。

所以,5^2等于7。

var myVar = 2;
myVar ^= 5;
alert(myVar); // 7

你可能需要编辑5^2 is 7这部分。我一开始还以为你是指“5的平方”,当然,它应该是25而不是7。 - 11684
@11684:在JavaScript中,Math.pow可以实现这个功能。这里没有什么需要困惑的。alert(5^2);//7 - Thalaivar
1
我知道,但还是有点困惑。不过在你用 `s 包裹后我就加了 +1。 - 11684

4

^(caret)是按位异或运算符。与更常见的运算符组合(如+=)一样,a ^= b等同于a = a^b

有关详细信息,请参见Mozilla的Javascript文档


3

x ^= y按位异或,并且是x = x^y的简写 - 因此在技术上是一种“赋值”,为了准确,单个运算符 '^' 表示按位异或。


不,XOR是!=^是按位异或。 - Bergi
1
什么?那是“不是”。@Bergi - 11684
@11684:然后检查真值表。这个答案是无用的,因为它没有提到它是一个位运算符(在赋值简写中)。 - Bergi
@Bergi 是的,你是对的。太快了。 - d'alar'cop
1
@bergi 嘿,现在我意识到你是对的。!=确实是异或。 - 11684

1

正如d'alar'cop(以及现在已经有几个人)指出的那样,这意味着一种被称为XOR的东西。我总是讨厌阅读维基百科的解释,所以我将在此提供另一种解释:

'XOR'表示“异或(eXclusive OR)”。什么是异或?首先看一个例子:

11000110 -- random byte
10010100
--------- ^ -- XOR
01010010

XOR是一种按位运算,如果两个位中有一个为1且另一个为0,则返回2。如果它们都是1,则不是“异或”,而是“与”(“普通或”允许两个1)。


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