鍍金池/ 問(wèn)答/HTML/ js中a?b:c和a&&b||c有什么區(qū)別

js中a?b:c和a&&b||c有什么區(qū)別

結(jié)果有區(qū)別嗎?效率有區(qū)別嗎?

發(fā)現(xiàn)自己sb了……一開(kāi)始打錯(cuò)字,后來(lái)又沒(méi)注意到b的問(wèn)題,補(bǔ)充下吧,!b為false

回答
編輯回答
孤星

a && b 相當(dāng)于 a ? b : a

x || c 相當(dāng)于 x ? x : c

所以合在一起

a && b || c 相當(dāng)于 a ? b ? b : c : c

2018年8月27日 14:23
編輯回答
墻頭草

a ? b : c 的意思是,如果 a 的值判定為 true,則表達(dá)式返回 b 的值;否則,返回 c 的值。

a && b || c 是邏輯計(jì)算,返回整個(gè)表達(dá)式的值,只不過(guò)出于優(yōu)化的角度,如果前面的計(jì)算已經(jīng)確定了結(jié)果,就會(huì)提前中止,此時(shí)返回的可能是中間某個(gè)表達(dá)式的值。

所以當(dāng) a = 1, b = 0, c = 1 的時(shí)候,就會(huì)返回 c 的值,此時(shí)和上面的二元運(yùn)算符結(jié)果不同。

2017年9月27日 07:38
編輯回答
萌小萌

a?b:c // true時(shí)返回b;false時(shí)返回c
a&&b||c // a,b都不是假值,返回b;a,b其中有一個(gè)是假值,返回c

也就是說(shuō),當(dāng)b為假值(false, null, 0, "", undefined 和 NaN)時(shí),兩者結(jié)果會(huì)不同。
而最長(zhǎng)出現(xiàn)的比如( a = 1 ) && console.log( a ) || 2,則最終會(huì)依次顯示 1 和 2,因?yàn)閏onsole.log( a ) return 為 undefined。

2018年3月30日 12:12
編輯回答
情已空

前者b不參與判斷。后者b參與判斷。

2017年12月30日 14:39
編輯回答
故林

根據(jù)邏輯來(lái)理解啊。 a?b:c 只判斷a a真返回b否則返回c
a&&b||c 先判斷a a真=》判斷b b真 返回b b假 返回c

            a假=>返回c
2017年4月2日 07:45
編輯回答
怣痛

讓我重新溫習(xí)了一下JavaScript的運(yùn)算符,棒

2018年4月4日 08:03