JS--該死的&&和||

洞拐洞拐發表於2016-11-17

  近段時間搞前端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.

 

相關文章