2012-08-03 87 views
1

我有一個使用這個符號,以確保一個對象初始化一個JavaScript:對象等於自我或空對象

MyObject = MyObject || {}; 

我明白它做什麼,即檢查羯羊MyObject的是什麼,如果不分配一個空對象MyObject。我並不完全瞭解JS的所有內部特性,所以我不知道如何在一個任務中使用邏輯比較。

它是如何工作的?有沒有其他語言允許這樣做?

回答

2

取決於語言。

例如,在Ruby中,您可以使用此樣式。

但是在PHP中,你不能使用這種風格,因爲在PHP中,邏輯運算符總是返回一個布爾值(true/false)。

結論:

如果邏輯運算符總是返回一個布爾值,那麼你不能使用這種風格。

如果邏輯運算符返回第一個值,當第一個值爲真時,否則返回第二個值,那麼您可以使用這種樣式。

+0

我想這是JS解釋未定義值爲false的組合,並且邏輯比較不一定會返回一個bool。感謝你和Peter的澄清。 – jurgemaister 2012-08-03 12:49:26

1

邏輯「或」操作符具有短路語義,這意味着右操作數僅在左手邊操作數評估爲false時才被評估。因此,如果MyObject初始化,則該語句讀取MyObject = MyObject;(不做任何事),否則它是MyObject = {};

+1

+1在我看來最好的答案 – imwill 2012-11-12 15:10:53

2

此語法的意思是「如果已定義,則自行分配MyObject;否則,給它一個空對象。」

它的工作原理是,Javascript將未定義的值視爲false,並將其定義爲true。將其與邏輯表達式的懶惰評估相結合,就會得到上述行爲。