在掘金上碰到一個有趣的問題 true || false && false這個結(jié)果是啥
答案是true
why?
最初的結(jié)論是:&&的邏輯運算符的優(yōu)先級高于||
然而最后結(jié)論是短路運算的結(jié)果。

image.png
短路運算
&&:表達式1 && 表達式2
當表達式1 為true時,返回表達式2
當表達式1 為false時,返回表達式1,且不會執(zhí)行表達式2
||:表達式1 || 表達式2
當表達式1 為true時,返回表達式1,且不會執(zhí)行表達式2
當表達式1 為false時,返回表達式2
又去查了一堆資料,又碰到個奇怪的問題。
true || alert(2) && false // 結(jié)果為true,alert(2)并沒有執(zhí)行
如果按優(yōu)先級來不應(yīng)該會執(zhí)行alert(2)嗎?
再來個問題:
false && false || alert(1) // 結(jié)果彈窗1,執(zhí)行了alert(1)
如果按從左往右的順序執(zhí)行,短路運算生效,應(yīng)該不會執(zhí)行alert(1)
經(jīng)過與一位Java同事的討論,最后得出如下結(jié)論:
遇到||運算符,先去左邊的表達式得出結(jié)果,如果結(jié)果為true,則不會去執(zhí)行右邊的表達式,則短路運算生效;如果結(jié)果為false,則去執(zhí)行右邊的表達式,再去根據(jù)兩邊的結(jié)果去執(zhí)行||運算符
當同時存在多個||時,從左到右,一一執(zhí)行上述規(guī)則。