JavaScript的一些奇怪行为,任何人都可以解释一下

时间:2015-08-29 17:39:33

标签: javascript

请帮助我理解下面的代码,' 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

2 个答案:

答案 0 :(得分:6)

a设置为(1, 5 + 10) * 5。在顶层,它是乘法表达式,将1, 5 + 10乘以51, 5 + 10使用逗号运算符,首先评估1,丢弃它,然后评估5 + 10,其结果为15,然后乘以5 ,屈服于75

b的工作原理类似,只是它有很多逗号。它评估了很多东西,丢弃了所有结果,最后继续评估最后一个38 + 10,它给出了结果48

c评估5 & 3 + 10&的优先级低于+,因此它实际上是5 & (3 + 10)3 + 1013,二进制为1101;二进制文件中5101。对这两个值执行按位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

最后一个数字是十进制数