群里看到的一道前端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 語句只允許單個表達式被執行。, 運算符被用來允許多個表達式被當作單個表達式,從而規避該限制。