逗号表达式

初遇js逗号表达式

初次碰到逗号表达式,是在一次面试中的一道笔试题:

var i=0,j=0,k=0;
for(;i<6,j<10;i++,j++){
  k = i + j;
}
console.log(k);

一眼望去,就是个for循环啊,仔细一看,怎么有两个参数?有点蒙逼的感觉。。。
我想js可以单行声明变量,如下:

var i=0,j=0,k=0;

每个变量都能正常声明,说明逗号前后的表达式都可以执行,也互不影响。那这个for循环中的i++和j++应该也是也互不影响?但是for循环是由哪个变量来控制啊,是由i<6还是由j<10?
思来想去,最终也是没能给出正确答案。。。

什么是js逗号表达式?

面试结束后,赶紧去网上查资料,原来这种方式叫逗号表达式,它的特点是逗号前后的表达式都会执行,并且把最后一个逗号后的表达式的值返回给整个表达式。先来个简单的例子:

console.log((1,2,3));//3

结果可以看到打印的是3,也就是说表达式(1,2,3)返回的是最后一个逗号后面的值。
再来一个稍微复杂点的例子:

console.log((b=4,c=10+b,b*5));//20
console.log(c);//14

这个例子第一个会打印出20,这是因为返回了b*5,而b=4,所以会打印出20,第二个会打印出14,表示逗号表达式的每个被逗号隔开的表达式都会执行,而c=10+b,所以打印结果是14。

for循环最终打印出多少?

再回到刚才那个for循环,i<6,j<10这也是一个逗号表达式,for循环的循环条件取决于这个逗号表达式所返回的值,而根据之前所说,会返回最后一个逗号后的表达式的值作为整个逗号表达式的值。因此,当j<10的时候,会返回true,for循环会一直进行下去,当j>=10,会返回fasle,整个for循环会结束。

后面的i++,j++,也是一个逗号表达式,每次循环i和j都会分别执行,自加1。直到j=10的时候,for循环停止,此时内部的i和j都自加到了9,因此k=9+9;结果会打印出18。

如果改变一下for循环条件位置,如下:

var i=0,j=0,k=0;
for(;j<10,i<6;i++,j++){
  k = i + j;
}
console.log(k);

这样会打印出多少呢?

你可能感兴趣的:(逗号表达式)