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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM