逗號表達(dá)式

初遇js逗號表達(dá)式

初次碰到逗號表達(dá)式,是在一次面試中的一道筆試題:

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

一眼望去,就是個(gè)for循環(huán)啊,仔細(xì)一看,怎么有兩個(gè)參數(shù)?有點(diǎn)蒙逼的感覺。。。
我想js可以單行聲明變量,如下:

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

每個(gè)變量都能正常聲明,說明逗號前后的表達(dá)式都可以執(zhí)行,也互不影響。那這個(gè)for循環(huán)中的i++和j++應(yīng)該也是也互不影響?但是for循環(huán)是由哪個(gè)變量來控制啊,是由i<6還是由j<10?
思來想去,最終也是沒能給出正確答案。。。

什么是js逗號表達(dá)式?

面試結(jié)束后,趕緊去網(wǎng)上查資料,原來這種方式叫逗號表達(dá)式,它的特點(diǎn)是逗號前后的表達(dá)式都會執(zhí)行,并且把最后一個(gè)逗號后的表達(dá)式的值返回給整個(gè)表達(dá)式。先來個(gè)簡單的例子:

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

結(jié)果可以看到打印的是3,也就是說表達(dá)式(1,2,3)返回的是最后一個(gè)逗號后面的值。
再來一個(gè)稍微復(fù)雜點(diǎn)的例子:

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

這個(gè)例子第一個(gè)會打印出20,這是因?yàn)榉祷亓薭*5,而b=4,所以會打印出20,第二個(gè)會打印出14,表示逗號表達(dá)式的每個(gè)被逗號隔開的表達(dá)式都會執(zhí)行,而c=10+b,所以打印結(jié)果是14。

for循環(huán)最終打印出多少?

再回到剛才那個(gè)for循環(huán),i<6,j<10這也是一個(gè)逗號表達(dá)式,for循環(huán)的循環(huán)條件取決于這個(gè)逗號表達(dá)式所返回的值,而根據(jù)之前所說,會返回最后一個(gè)逗號后的表達(dá)式的值作為整個(gè)逗號表達(dá)式的值。因此,當(dāng)j<10的時(shí)候,會返回true,for循環(huán)會一直進(jìn)行下去,當(dāng)j>=10,會返回fasle,整個(gè)for循環(huán)會結(jié)束。

后面的i++,j++,也是一個(gè)逗號表達(dá)式,每次循環(huán)i和j都會分別執(zhí)行,自加1。直到j(luò)=10的時(shí)候,for循環(huán)停止,此時(shí)內(nèi)部的i和j都自加到了9,因此k=9+9;結(jié)果會打印出18。

如果改變一下for循環(huán)條件位置,如下:

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

這樣會打印出多少呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容