2015-06-20 59 views
1

我從庫中獲得了一段代碼,其中包含以下內容。 options = options || {}的目的是什麼?Javascript確保對象不是由空或者對象定義的對象

var x = function(options) { 
     options = options || {}; 
     if ('select_message' in options) 
      options.selectMessage = options.select_message; 
     // something else 

    } 

乍一看,由於使用布爾運算符,選項似乎變爲真或假。但這並不合理。我的假設是它確保「選項」不會被定義,即類似於下面的內容。

if (typeof options != 'undefined') 
    options = {}; 
+1

這應該有所幫助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators – Ian

+0

你問「目的是什麼......?」,但主題行你的問題已經回答了。如果它的操作數都不是「true」或「false」,'||'操作符不會返回true或false。 – nnnnnn

+1

謝謝@Ian。我以前不知道,所以這只是我的假設。 –

回答

3

如果optionsfalsyundefinedfalsenull0等)它被分配{}(匿名對象)。當通過對象提供可選參數時,這是一種常見模式。通過確保options至少被分配一個匿名對象,它使得後面的代碼在訪問選項屬性(如options.something)時不必檢查它是否被定義。

MDN:Falsy

+2

「..未定義[或任何其他false-y值] ..」 - 有時它必須根據OPs末尾提出的代碼段明確檢查。 – user2864740

+0

@ user2864740確實,更新提到了虛假。 – Cymen

1

的||是一個二元運算符,它將返回第一個真值。如果你做布爾({})=> true。如果選項未定義,則返回{},並將選項設置爲此值。

你在想這是對的。如果選項通過「truthy」(http://www.sitepoint.com/javascript-truthy-falsy/),則對象設置爲自身,或者只是保持相同的對象。如果它是「虛假的」,它將被設置爲空對象。

相關問題