故事是這樣的..一個(gè)哥們在面試給我發(fā)了道題..我一下就懵圈了..
for(var i=0,var j=0;i<10,j<6;i++,j++){
k=i+j
}//k的值是多少?
當(dāng)時(shí)的內(nèi)心os是,為什么for的條件可以有兩個(gè),為啥我從沒見過,這題是不是太偏?...(無知的我!..>_<..)
經(jīng)過谷歌之后明白了逗號(hào)操作符的存在..下面詳細(xì)說來!
逗號(hào)操作符
對(duì)它的每個(gè)操作對(duì)象求值(從左至右)翘簇,然后返回最后一個(gè)操作對(duì)象的
<small>mdn曰</small>
且看式例
a=(1,2,3)//a=3;
這能解開我們上文的第一個(gè)疑問了!
在上面題目中 條件位置有兩個(gè)值,根據(jù)逗號(hào)操作符的特性,我們可以把我們的題目看成這樣了
for (var i=0,var j=0;j<6;i++,j++){
k=i+j;
}
ok,問題解決,它終于變成一個(gè)正常的for語句..么么噠..撒花~~
吃瓜的我:
為啥前面不排除了嘞?
為啥后面不排除了嘞?
且慢還有示例
當(dāng)你想要在期望一個(gè)表達(dá)式的位置包含多個(gè)表達(dá)式時(shí),可以使用逗號(hào)操作符厌处。這個(gè)操作符最常用的一種情況是:for 循環(huán)中提供多個(gè)參數(shù)脐湾。
<small>mdn君又云</small>
for (var i = 0, j = 9; i <= 9; i++, j--)
document.writeln("a[" + i + "][" + j + "] = " + a[i][j]);
這里還要解釋下,這里的var中的逗號(hào)不是逗號(hào)操作符,因?yàn)樗皇谴嬖诒磉_(dá)式中!
也就是說逗號(hào)操作符只存在表達(dá)式中钓株!
什么是表達(dá)式檐盟? ?(? ??????? ?)?
goole一下(其實(shí)是百度百科)
表達(dá)式,是由數(shù)字命辖、算符况毅、數(shù)字分組符號(hào)(括號(hào))分蓖、自由變量和約束變量等以能求得數(shù)值的有意義排列方法所得的組合
所以這里var不是表達(dá)式哦,為啥不是表達(dá)這里不說了(你猜我知不知道..)
那么下一個(gè),for最后的參數(shù)也是逗號(hào)操作符,而且mdn上明確了它怎么玩的,但是它和我var a=(1,2,3)有點(diǎn)點(diǎn)區(qū)別,我想咱就能得出一個(gè)非官方的結(jié)論哈
用逗號(hào)分開的表達(dá)式的值分別結(jié)算尔许,但整個(gè)表達(dá)式的值是最后一個(gè)表達(dá)式的值么鹤。
所以我們的問題可以簡化成這樣..
for(var i=0,j=0;j<6;i++,j++){
k=i+j;
}//這里i和j同時(shí)運(yùn)行 所以k=10;
妥妥的問題已經(jīng)解決了,可是發(fā)現(xiàn)一特坑的地方....
感覺是不是逗號(hào)操作符要看上下文,要看上下文~~上下文!!!!
故而斗膽總結(jié)下逗號(hào)出現(xiàn)在哪里!
筆者現(xiàn)在只是挖個(gè)坑給以后也許能成為大神的自己來填..所以有所錯(cuò)誤請(qǐng)見諒
1.多個(gè)賦值
var a=1,b=2
//這樣很常見哦!
2.函數(shù)傳參
var sum(a,b){
return a+b;
}
sum(1,2)//用來分隔各個(gè)多個(gè)參數(shù)
3.逗號(hào)表達(dá)式
var foo(){
var a=0;
return (x+=1,x);//x+=1是會(huì)運(yùn)行的喲..
}
好像我只知道這么多了....