2013-04-05 93 views
2

的意思是什麼初始化變量立場的:什麼是「變量=變量|| {}」在JavaScript

var variable = variable || {} ; 

如何以及何時應該應用它呢?

+0

請參閱http://www.ecma-international.org/ecma-262/5.1/#sec-11.11。 – Zeta 2013-04-05 21:58:38

+0

感謝您包含該鏈接。真的很高興能夠真正閱讀這個句子,這個句子在過去已經讓我失望了:「_ &&或||運算符產生的值不一定是布爾類型,產生的值將總是兩個操作數表達式中的一個的值。「 – jahroy 2013-04-05 22:00:09

+2

如果它位於代碼模塊的頂部,則用於聲明」名稱空間「對象。見上面提到的問題。 – Alnitak 2013-04-05 22:08:39

回答

8

這行代碼執行以下操作:

IFvariable沒有被定義(或具有falsey值)THEN 設置爲一個空對象。

ELSE什麼也不做(從技術上來講,variable被分配給自己)

換句話說variable將被轉換成一個空的對象,如果它是下列任何一項:

  • undefined
  • null
  • NaN的
  • 一個空字符串

falsey值規範的定義見toBoolean

+0

「不要做任何事情」的結果,但內部它是一個指令,將變量分配給自己(可以通過編譯器進行優化,但仍然是一個賦值表達式),因此性能Closure Compiler會將其編譯爲'可變||(變量= {})'。順便說一句,你在你的falsy值列表中缺少'NaN'。 – 2013-04-05 22:00:30

+0

你忘了'NaN'。但是,您應該跳過此列表並引用['toBoolean'](http://www.ecma-international.org/ecma-262/5.1/#sec-9.2)。另見http://www.ecma-international.org/ecma-262/5.1/#sec-11.11 – Zeta 2013-04-05 22:01:03

+0

謝謝你們!編輯。 – jahroy 2013-04-05 22:04:29

0

如果變量未定義或爲false,則將其初始化爲空對象。

0

這是測試是否初始化variable。如果不是,則它將variable初始化爲空對象。如果它確實存在,它什麼也不做,(技術上自行分配variable)。

1

如果變量已存在使用它,否則創建一個空對象