一道js的前端面试题,主要弄清楚逗号表达式的作用

群里看到的一道前端JS面试题。我以为我会,其实我错了。找了很多资料,写下来。

1 var i,j,k;
2 for( i = 0 , j = 0; i < 10 , j < 6; i++ , j++ ) {
3 k = i+j;
4 }
5 document.write(k); //10

控制台结果:

               

然后我把j修改成16.

1     for(var i = 0, j = 0; i < 10 , j < 16 ; i++ , j++){
2         k = i + j;
3         console.log('i='+i+',j='+j+'k的结果是:'+k);
4     }
5     console.log(k);//30

 控制台结果:

               

我看到这个结果,感到不理解。然后查资料,有人说是因为:“这个主要是逗号语句,当有多个条件,之间用逗号隔开的时候,会返回最右侧的条件

然后我又该改改代码:

1     for (var i = 0,j = 0; i < 16; i++, j++)
2     {
3         k = i + j;
4         console.log('i='+i+',j='+j+'  k的结果是:'+k);
5     }
6     console.log(k);

控制台截图:

             

发现和第二种效果是等价的。

     1 var t = (4,5,7); 2 console.log(t);//7 

一、逗号运算符的特性及作用 
逗号运算符的作用是将若干表达式连接起来。它的优先级别在所有运算符中是最低的,结合方向是"自左至右"的。 
如:3*3,4*4 
二、逗号表达式 
逗号表达式的一般形式是:表达式1,表达式2,表达式3……表达式n 
逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。 
看下面几个例子: 
x=8*2,x*4 /*整个表达式的值为64,x的值为16*/ 
(x=8*2,x*4),x*2 /*整个表达式的值为128,x的值为16*/ 
x=(z=5,5*2) /*整个表达式为赋值表达式,它的值为10,z的值为5*/ 
x=z=5,5*2 /*整个表达式为逗号表达式,它的值为10,x和z的值都为5*/ 
逗号表达式用的地方不太多,一般情况是在给循环变量赋初值时才用得到。所以程序中并不是所有的逗号都要看成逗号运算符,尤其是在函数调用时,各个参数是用逗号隔开的,这时逗号就不是逗号运算符。 
如:printf(" %d,%d,%d",x,y,z);

###########################################################

运算符使它两边的表达式以从左到右的顺序被执行,并获得右边表达式的值。, 运算符最普通的用途是在 for 循环的递增表达式中使用。例如:
for (i = 0; i < 10; i++, j++)
{
k = i + j;
}

console.log(k);//18
每次通过循环的末端时, for 语句只允许单个表达式被执行。, 运算符被用来允许多个表达式被当作单个表达式,从而规避该限制。

posted @ 2016-05-18 14:22 SkyTeam_LBM 阅读(...) 评论(...) 编辑 收藏