雖然通過一些代碼(JavaScript)的尋找,我發現這段代碼:&&運算符在Javascript
<script>window.Bootloader && Bootloader.done(["pQ27\/"]);</script>
什麼我不明白是什麼&&
是在那裏做,代碼是從Facebook和顯然被縮小和/或混淆了,但它仍然做同樣的事情。
tl; dr:&&
運營商在這裏做什麼?
雖然通過一些代碼(JavaScript)的尋找,我發現這段代碼:&&運算符在Javascript
<script>window.Bootloader && Bootloader.done(["pQ27\/"]);</script>
什麼我不明白是什麼&&
是在那裏做,代碼是從Facebook和顯然被縮小和/或混淆了,但它仍然做同樣的事情。
tl; dr:&&
運營商在這裏做什麼?
&&
確保在調用done
方法之前存在Bootloader
函數/對象。代碼利用布爾短路來確保第一個表達式在執行第二個表達式之前評估爲true。請參閱short-circuit evaluation wikipedia條目以獲得更深入的解釋。
window.Bootloader && Bootloader.done(["pQ27\/"]);
它相當於:
if(window.Bootloader) {
Bootloader.done(["pQ27\/"]);
}
&&
是一個AND
操作,就像大多數其他任何地方。這真的沒有什麼奇特的。
如果第一個操作數爲假,那麼包含JavaScript的大多數語言將停止評估AND
運算符。
在這種情況下,如果window.Bootloader
不存在,它將爲undef,其計算結果爲false,因此JavaScript將跳過第二部分。
如果它是真的,它會繼續並調用Bootloader.done(...)
。
認爲它作爲if(window.Bootloader) { Bootloader.done(...) }
的快捷方式也& &運算符返回這樣的,第一個遇到的值: 空,未定義,0,假,NaN的 「」
例如: 如果
var1 = 33
var2 = 0
var3 = 45
var1 && var2 && var3
returns 0
JavaScript中沒有任何類。引導程序將是一個函數或對象 – paislee 2012-01-04 00:35:44
@paislee:羅傑,更新。 – sdolan 2012-01-04 00:39:34
它並不「確定」* Bootloader *是一個函數或一個對象,它只是測試* window *對象是否具有值爲truthy的* Bootloader *屬性。如果是這樣,那麼它假定它是可調用的。 – RobG 2012-01-04 02:26:43