我在Twitter上关注某人并发布了以下测验:
var a=42,b,c;
b=a++, a++;
c=(a++,a++);
console.log(a,b,c);
我用jsbin.com测试了它,结果是:
46个
42个
45
这是测试页面:sample on jsbin.com。
现在我将解释我所知道的并询问我不知道的事情:
第一行:var a=42,b,c;
这很容易声明三个变量并赋值给第一个变量。
第2行:b=a++, a++;
这也很容易b等于a + 1
但我的问题#1是: 如果我们想开始一个新的声明;我们不应该用分号关闭第一个?? 我的意思是第二行很容易,如果它是这样的: B = A ++; 一个++; 但是我们怎么能用它们之间的昏迷来写呢? [这对我来说是新的,我觉得这是一个新问题]
第3行:c=(a++,a++);
现在这条线是我无法弄清楚的。它显示了一个赋值,但放入括号并将变量分隔为昏迷,这将导致45?
这是我的第二个问题:
第3行的解释是什么?
答案 0 :(得分:3)
您可以查看MDN documentation:逗号运算符只是简单地计算所有表达式并返回最后一个表达式...
对于行b=a++, a++;
,有两个表达式:b=a++
和a++
。因此,这意味着第一个将a
的值放入b
并递增a
,因为第二个只增加a
。由于没有什么需要整个表达式的返回值,它的作用如下:
b = a++; // b = 42, a = 43
a++; // a = 44
但是对于第3行,c得到了这个操作的结果,然后得到a
的另外两个增量的结果,这就像:
a++; // a = 45
c = a++; // c = 45, a = 46