请帮助我理解下面的代码,' a' ,' b'和' c'计算。
var a = (1,5 + 10) * 5; //returns 75
var b = (0, "150", 30, 20, 38 + 10); //returns 48
var c = (5 & 3 + 10); // returns 5
答案 0 :(得分:6)
a
设置为(1, 5 + 10) * 5
。在顶层,它是乘法表达式,将1, 5 + 10
乘以5
。 1, 5 + 10
使用逗号运算符,首先评估1
,丢弃它,然后评估5 + 10
,其结果为15
,然后乘以5
,屈服于75
。
b
的工作原理类似,只是它有很多逗号。它评估了很多东西,丢弃了所有结果,最后继续评估最后一个38 + 10
,它给出了结果48
。
c
评估5 & 3 + 10
。 &
的优先级低于+
,因此它实际上是5 & (3 + 10)
。 3 + 10
为13
,二进制为1101
;二进制文件中5
为101
。对这两个值执行按位AND会产生101
,这又是5
,这就是结果。
答案 1 :(得分:1)
为了更容易理解,"逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。"
所以(a,b,c,... z)将评估所有内容,但只返回z。
在你的例子中:
var a = (1,5 +10)*5;
评估1,然后评估5 + 10(即15);然后返回15并乘以5。
&运算符对数字进行按位AND(即比较两个二进制数,对于每个位置,如果两个数都为1,则返回1)。
0101 //5
1101 //13
0101
最后一个数字是十进制数