任何人都可以解释这条线是如何工作的。
a & 3 || (b, c)
第一部分是否转换为:
a = a & 3;
或者是三元代码,如果返回true b,否则c?感谢
答案 0 :(得分:2)
我认为第一部分是按位而且是3.如果那是真的,那就回去吧。
否则,它将根据逗号运算符返回c
。
if (a & 3 != false)
return a & 3;
else
return c;
答案 1 :(得分:2)
那不是三元运营商。 a || b
的工作方式是评估a
,如果a
强制true
,则返回a
,否则会评估b
并返回&
。 c
是按位的。表达式的第二部分不是很有意义,但我相信它会返回a
的值。
所以意思是:“如果按位且3不为0则返回,否则返回c”。在这种意义上,它的行为有点像三元运算符......并且{{1}}保持不变。
答案 2 :(得分:2)
如果a
的二进制写入的最后两位之一为“1”,则返回a&3
。
相反,a & 3
为0,因此返回(b, c)
,即c
。
它的作用似乎很清楚,但我无法想象为什么......
如果a是正整数,则可以写为
a%4||c
清楚地显示了手术的周期性。
答案 3 :(得分:1)
(关于术语的注释:在1 + 2
中,1和2是“操作数”而+是“操作符”)
该表达式中的第一个运算符(&
)是按位'和':https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
第二个运算符(||
)是一个逻辑'或',如果它是真的(如果它会通过if
检查),则返回第一个操作数,否则返回第二个操作数。
第三个(,
)是逗号运算符,它只返回第二个操作数。
所以,用简单的英语:用a
和3
(二进制为11)取符号'和',意味着得到的值将是0,1,2之一,或3,取决于a
中前两位的值。如果不为零,则返回该值。否则,请返回c
,但也会评估b
。
例如,如果a
为2,那么a & 3
将为10& 11 == 10(因为1& 1 == 1和0& 1 == 0),这是2和truthy(唯一的假数字是0或0.0),所以这将是整个表达式的返回值,甚至不会评估b
和c
。另一方面,如果a
为4,则a & 3
将为100& 11 == 000,这是假的,因此将评估(b, c)
,结果将是c
是返回值。