群里看到的一道前端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 语句只允许单个表达式被执行。, 运算符被用来允许多个表达式被当作单个表达式,从而规避该限制。