这个运算符是什么:&=

Sno*_*ote 2 javascript bit-manipulation operators

有人可以解释什么是运营商&=

我搜索,但我只拿到结果与&=.

wes*_*ton 11

a &= b;
Run Code Online (Sandbox Code Playgroud)

是相同的

a = a & b;
Run Code Online (Sandbox Code Playgroud)

&是"按位和运算符",搜索它.


Una*_*ivi 7

它是一个速记操作符,允许您崩溃

a = a & b
Run Code Online (Sandbox Code Playgroud)

a &= b
Run Code Online (Sandbox Code Playgroud)

除了对整数进行逐位运算外,&=还可以在布尔值上使用,允许您折叠

a = a && b
Run Code Online (Sandbox Code Playgroud)

a &= b
Run Code Online (Sandbox Code Playgroud)

然而,在逻辑运算的情况下,扩展形式是短路的,而后者的折叠形式不会短路.

例:

b()一个函数返回一个值,并做一些影响程序状态的东西

让它a成为一个布尔值false

如果你这样做

a = a && b()
Run Code Online (Sandbox Code Playgroud)

短路发生的情况:因为afalse没有必要评价b(以及可能发生的内额外的计算b()被跳过).

另一方面,如果你这样做

a &= b()
Run Code Online (Sandbox Code Playgroud)

短路不会发生:b在任何情况下都会被评估,即使afalse(并且评估b()不会改变逻辑结果),因此内部可能发生的任何额外计算b()都会被执行.