假設我們有一個函數的可選參數,它可以爲undefined
。有JavaScript對象分配表達式 - 比較
options || (options = {});
和
options = options || {};
之間有什麼區別?如果沒有,你會發現哪一個更好(我的意思是更快或更可讀)?問題是 - 你會用哪一個在JavaScript中實現可選參數?
假設我們有一個函數的可選參數,它可以爲undefined
。有JavaScript對象分配表達式 - 比較
options || (options = {});
和
options = options || {};
之間有什麼區別?如果沒有,你會發現哪一個更好(我的意思是更快或更可讀)?問題是 - 你會用哪一個在JavaScript中實現可選參數?
那些確切2行是不同的:
在第一個其它不執行任何操作的選項(如果沒有定義的話),而另一個是一個語句的表達式。
好的,是的,我知道 - 但他們的效果是一樣的(我認爲是這樣)。問題是你比其他人更喜歡其中之一嗎? – ducin
這是錯誤的。首先,原始表達仍然是一個陳述。其次,如果它是虛假的,則第一個片段仍將空對象分配給「選項」。 –
@tkoomzaaskz如果'options'沒有被定義(由於未被傳遞),它將被賦值爲'{}'。您可以確認此處[此處](http://jsbin.com/aWecAxE/1/)。 –
從邏輯上說,它們都是相同的。
options || (options = {});
如果options
是Truthy值,那麼它會短路,不會進入下一部分。如果它是一個Falsy值,它將轉到下一部分,並創建空對象並將其分配到options
。
options = options || {};
同樣的事情,首先評估右手邊。如果options
是Truthy,它將被分配爲options
,如果它是Falsy,則會創建一個空對象並將其分配給options
。
注:如果options
是一個函數的一個可選參數,以及它是否可以接受其他Falsy值,即使在用戶通過一個Falsy值,故意,像false
,0,null
,它仍然將使用空對象
這些行的上下文是什麼? – JNF
@RoyiNamir你的版本導致語法錯誤... – ducin
@tkoomzaaskz對不起。我打算解決這個問題(之後我認爲有一個缺失的支架)。感謝您的糾正。 –