2013-12-19 46 views
0

假設我們有一個函數的可選參數,它可以爲undefined。有JavaScript對象分配表達式 - 比較

options || (options = {}); 

options = options || {}; 

之間有什麼區別?如果沒有,你會發現哪一個更好(我的意思是更快或更可讀)?問題是 - 你會用哪一個在JavaScript中實現可選參數

+0

這些行的上下文是什麼? – JNF

+0

@RoyiNamir你的版本導致語法錯誤... – ducin

+0

@tkoomzaaskz對不起。我打算解決這個問題(之後我認爲有一個缺失的支架)。感謝您的糾正。 –

回答

0

那些確切2行是不同的:

在第一個其它不執行任何操作的選項(如果沒有定義的話),而另一個是一個語句的表達式。

+0

好的,是的,我知道 - 但他們的效果是一樣的(我認爲是這樣)。問題是你比其他人更喜歡其中之一嗎? – ducin

+0

這是錯誤的。首先,原始表達仍然是一個陳述。其次,如果它是虛假的,則第一個片段仍將空對象分配給「選項」。 –

+0

@tkoomzaaskz如果'options'沒有被定義(由於未被傳遞),它將被賦值爲'{}'。您可以確認此處[此處](http://jsbin.com/aWecAxE/1/)。 –

0

從邏輯上說,它們都是相同的。

options || (options = {}); 

如果options是Truthy值,那麼它會短路,不會進入下一部分。如果它是一個Falsy值,它將轉到下一部分,並創建空對象並將其分配到options

options = options || {}; 

同樣的事情,首先評估右手邊。如果options是Truthy,它將被分配爲options,如果它是Falsy,則會創建一個空對象並將其分配給options

注:如果options是一個函數的一個可選參數,以及它是否可以接受其他Falsy值,即使在用戶通過一個Falsy值,故意,像false,0,null,它仍然將使用空對象