先談談經歷吧,今天debug js的時候發(fā)現了代碼被混淆過了豺憔,但是由于比較關鍵伦糯,只能硬著頭皮看了。
然后就看到非常經典的一行代碼靠娱。
簡化一下差不多是這個意思 return i && (expa,expb),expc;
這里比較痛苦的就是逗號操作符啥意思呀沧烈?和for循環(huán)或者調用參數相關的我們都很熟悉,但是單獨用時什么意思呢像云?
百度果然是人類解決問題最好的方式:逗號操作符
這里面很關鍵的一句話:逗號操作符 對它的每個操作數求值(從左到右)锌雀,并返回最后一個操作數的值。
相當于現在有個 expr1, expr2, expr3
然后先執(zhí)行 expr1迅诬,然后執(zhí)行expr2腋逆,最后執(zhí)行expr3,并把expr3返回侈贷。
然而惩歉,我隨便試了下,反正貌似不太對俏蛮。
前面a和b的值不出我所料撑蚌,說明先執(zhí)行第一個表達式,后執(zhí)行第二個表達式搏屑,但是為什么c=2呢争涌?難道不應該返回第二個表達式的返回結果才對嘛?
百思不得解睬棚。
.
.
.
然而第煮,一個無意的回眸解幼,難道
=
和抑党,
的優(yōu)先級不同?=
不是最末尾的優(yōu)先級撵摆?
通過運算符的優(yōu)先級,我最終確定了底靠,,
的優(yōu)先級居然比=
還低,而且還是最末尾的特铝。
那么 c= a=1,b=1;
可以轉換成 (c= a =1),b=1
; 暑中,所以c的返回值其實是1。
為了驗證這個鲫剿,我們可以這樣做鳄逾。
c = (a=1,b=1)
這樣就完美了。