林學習的JavaScript,今天我發現這個代碼:Javascript語句與|| {};
window.Picture2 = window.Picture2 || {};
我不明白|| {}; 有人可以爲我解釋這個嗎? TKS這麼多:)
林學習的JavaScript,今天我發現這個代碼:Javascript語句與|| {};
window.Picture2 = window.Picture2 || {};
我不明白|| {}; 有人可以爲我解釋這個嗎? TKS這麼多:)
這是一個默認的值賦給一個全局變量Picture2
一種危險的方式。
window.Picture2 = window.Picture2 || {};
這將初始化window.Picture2
作爲一個新的對象{}
如果沒有定義它。 然而,因爲這是truthyness檢查,Picture2
也將被分配,如果有任何這些falsy values一個空對象:
// these are all falsy
0, NaN, null, '', undefined, false
這可能不適合所有這些情況下,期望的行爲,特別是對0
,NaN
,false
或''
值。
沒有爲ECMAScript的6添加default operator這確實檢查undefined
,沒有別的建議:
window.Picture2 ??= {};
它將檢查.Picture2
已被定義,如果它已使用該值,則將Window.Picture2
分配給新對象文字。
由於@Christoph狀態 - Picture2
將被分配一個新的對象字面量,如果對象是falsy
。
準確地說:如果是falsy - 這包括'0',' 「」','NaN','null'返回FALSE。 – Christoph 2013-04-22 09:38:51
@Christoph - 謝謝,編輯。 – 2013-04-22 09:49:25
如果window.Picture2
是未定義的(假在條件評估)它分配一個缺省爲空對象window.Picture2
則OR(||
)被exectuted和window.Picture2
成爲空對象。
+1這不是更好的檢查'if(!window.Picture2){window.picture2 = {}}'?在兩種情況下都需要進行比較,但可以跳過重新分配。事件雖然這段代碼稍長一些,但它應該更快,並且對於一些人更具可讀性。 – insertusernamehere 2013-04-22 09:47:32
@insertusername這個任務*可能會被內部優化掉,但儘管如此,儘管如此,如果仍然存在虛假值的缺陷,那麼您的代碼是朝着正確方向邁出的一步。 – Christoph 2013-04-22 09:49:48
@insertusername這裏的保存選項是'if(typeof window.Picture2!= undefined){...}' - 非常詳細,但可以將其放入一個'defined'函數或類似的東西。 – Christoph 2013-04-22 10:20:34