js中|| 和&&的執行結果預設是0為false。
a && b ,如果 a 為true,直接返回b,而不管b為true或者false,否則返回a;
a || b ,如果 a 為false,直接返回b,而不管b為true或者false,否則返回 a。
如alert(-1||-2); 返回-1;alert(-1&&-2);返回-2
例1:
var i = 1;
var t =(
9 ||(function())()
&& (function())()
&& (function())());
console.log("t=",t,"i=",i)
輸出結果:
例2:
var i = 1;
var t =(
(9 ||(function())() )
&& (function())()
&& (function())());
console.log("t=",t,"i=",i)
輸出結果:
這裡和||、&&的短路有關,||式子前結果是true則短路,即||式後面的表示式不計算,直接返回||式前值;&&式子前是false則短路,返回&&式子前的值,後面的式子不計算。||、&&按從左往右的順序執行。
所以例1中,9大於0為true又是||或運算,出現短路後面的式子都不計算,直接返回9;例2 或||計算外加了括號,需先計算出結果後再和其他式子進行與&&計算。(9 ||(function())())這個表示式裡面會出現或運算短路的情況,這裡計算完進行&&與運算時,因&&式式前不是false所以不會有短路,會一直計算完整個式子。
參考:
JS執行順序
一 語法分析 瀏覽器將所有js檢查一遍,看有沒有語法錯誤,這裡並不會執行,沒有錯誤則進行第二步,預編譯 二 預編譯 首先要理解函式宣告整體提公升,變數 宣告提公升。這裡要注意變數的提公升,一般我們宣告乙個變數都是 var a 1 console.log a 1 但實際上拆分成了兩步,真正執行是這樣的...
js執行順序
執行緒 cpu 排程的最小單位 程序 cpu 資源分配的最小單位 js是單執行緒的,在同一時間,只能做一件事。但是js有同步任務和非同步任務。同步 有a,b兩段 執行完a後執行b 非同步 有a,b兩段 a和b同時執行 在非同步任務中還有微任務和巨集任務 微任務 promise,process.nex...
js 執行順序
同步任務 非同步任務 同步任務 立即執行 非同步任務 進入到非同步佇列當中 event queue eg ajax,settimeout,then,setinterval event loop 事件迴圈 task macro task 巨集任務 micro task 微任務 macro task 巨...