2013-04-22 86 views
10

林學習的JavaScript,今天我發現這個代碼:Javascript語句與|| {};

window.Picture2 = window.Picture2 || {}; 

我不明白|| {}; 有人可以爲我解釋這個嗎? TKS這麼多:)

回答

7

這是一個默認的值賦給一個全局變量Picture2一種危險的方式。

window.Picture2 = window.Picture2 || {}; 

這將初始化window.Picture2作爲一個新的對象{}如果沒有定義它。 然而,因爲這是truthyness檢查,Picture2也將被分配,如果有任何這些falsy values一個空對象:

// these are all falsy 
0, NaN, null, '', undefined, false 

這可能不適合所有這些情況下,期望的行爲,特別是對0NaN,false''值。

沒有爲ECMAScript的6添加default operator這確實檢查undefined,沒有別的建議:

window.Picture2 ??= {}; 
+0

+1這不是更好的檢查'if(!window.Picture2){window.picture2 = {}}'?在兩種情況下都需要進行比較,但可以跳過重新分配。事件雖然這段代碼稍長一些,但它應該更快,並且對於一些人更具可讀性。 – insertusernamehere 2013-04-22 09:47:32

+1

@insertusername這個任務*可能會被內部優化掉,但儘管如此,儘管如此,如果仍然存在虛假值的缺陷,那麼您的代碼是朝着正確方向邁出的一步。 – Christoph 2013-04-22 09:49:48

+0

@insertusername這裏的保存選項是'if(typeof window.Picture2!= undefined){...}' - 非常詳細,但可以將其放入一個'defined'函數或類似的東西。 – Christoph 2013-04-22 10:20:34

1

它讀作:

如果window.Picture2未定義空對象分配給 window.Picture2

+2

這不是JSON。 – 2013-04-22 09:36:25

+2

空的json?那是什麼? – Christoph 2013-04-22 09:36:36

+0

@GeraldSchneider對不起我的壞。 – loxxy 2013-04-22 09:37:10

4

它將檢查.Picture2已被定義,如果它已使用該值,則將Window.Picture2分配給新對象文字。

由於@Christoph狀態 - Picture2將被分配一個新的對象字面量,如果對象是falsy

http://www.sitepoint.com/javascript-truthy-falsy/

+1

準確地說:如果是falsy - 這包括'0',' 「」','NaN','null'返回FALSE。 – Christoph 2013-04-22 09:38:51

+0

@Christoph - 謝謝,編輯。 – 2013-04-22 09:49:25

6

如果window.Picture2未定義(falsy

+0

可悲的是,不僅是在'undefined' ... – Christoph 2013-04-22 09:45:23

+0

@Christoph這就是爲什麼在'()'我說'falsy' – 2013-04-22 09:46:37

+0

這是真的,但它的使用這種技術(見我的回答)時需要注意的最重要的一點! – Christoph 2013-04-22 09:47:37

1

如果window.Picture2是未定義的(假在條件評估)它分配一個缺省爲空對象window.Picture2則OR(||)被exectuted和window.Picture2成爲空對象。