谁能解释一下这条线是如何工作的。
a & 3 || (b, c)
第一部分是否翻译为:
a = a & 3;
或者那是一个三元代码,如果返回真 b,否则 c?谢谢
我认为第一部分是按位和 3。如果这是真的,请返回。
否则,它将c
基于逗号运算符返回。
if (a & 3 != false)
return a & 3;
else
return c;
那不是三元运算符。工作方式a || b
是a
被评估,如果a
强制返回true
则a
返回,否则b
被评估并返回。&
是按位与。表达式的第二部分意义不大,但我相信它会返回c
.
所以意思是:“如果按位和 3 不是 0 则返回那个,否则返回 c”。从这个意义上说,它的行为确实有点像三元运算符......并且a
保持不变。
如果二进制写入的最后两位之一a
是“1”,则返回a&3
。
相反,a & 3
是 0,所以返回(b, c)
,即c
。
它的作用似乎很清楚,但我无法想象为什么......
如果 a 是正整数,则可以写为
a%4||c
这清楚地表明了操作的周期性。
(术语说明:在1 + 2
中,1 和 2 是“操作数”,+ 是“运算符”)
该表达式 ( &
) 中的第一个运算符是按位“和”:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
第二个运算符 ( ||
) 是一个逻辑“或”,如果第一个操作数为真(如果它通过if
检查),则返回第一个操作数,否则返回第二个操作数。
第三个 ( ,
) 是逗号运算符,它只返回第二个操作数。
a
所以,用简单的英语:取with的按位“与” 3
(二进制为 11),这意味着结果值将是 0、1、2 或 3 之一,具体取决于a
. 如果它不为零,则返回该值。否则,返回c
,但b
也将被评估。
例如,如果a
是 2,那么a & 3
将是 10 & 11 == 10(因为 1 & 1 == 1 和 0 & 1 == 0),即 2 和真(唯一的假数是 0 或 0.0),所以这将是整个表达式的返回值,b
甚至c
不会被评估。另一方面,如果a
是 4,那么a & 3
将是 100 & 11 == 000,这是假的,所以(b, c)
将被评估,结果将c
是返回值。