近段時間搞前端js,零零星星的看了一些框架原始碼,發現大量存在&&和||,其語法看的我是頭冒青煙,也不知道怎麼回事,度娘搜吧,現在寫下來,以防忘掉。
先來約束一下用詞:有一表示式A : expr1 &&(||) expr2,包含左右兩個表示式expr1和expr2。
表示式:
在javascript中除了false表示假之外,"",undefined,null,0都可以表示假,其他的都表示真,像true,'q',2等等...
短路:
對於&&,當 expr1 => false 的時候,A表示式便可end;expr1 => true的時候,要繼續看expr2的值,如果expr2 => false,則A表示式為false,否則為true。
對於||,當 expr1 => true 的時候,A表示式便可end;expr1 => false的時候,要繼續看expr2的值,如果expr2 => false,則A表示式為false,否則為true。
簡單規則:
有一個指標p,用來指示執行A表示式的過程,當p指向expr1的時候,計算expr1的值,如果計算出expr1的值無法使A表示式end,例如 false || true,就將p指標指向expr2。
當A表示式end的時候,A表示式的值就是指標p指向那一部分。
例子:
'a' && 0 => 首先p指向'a',由於'a'=>true,無法end該表示式,指標p指向0,結果就是無論0是真是假,表示式回end,此時指標指向0,也就是說返回值是0。
false || 3 =>首先P指向false,由於false=>false,無法end該表示式,指標後移,你明白了?無需判斷,表示式返回3。
true || 'e' =>首先p指向true,直接end該表示式,返回值為true.