2011-10-18 80 views

回答

2

||運算符返回左側(如果爲真),右側(如果左側不正確)則返回右側。

所以:

var d = d || {} 

跟它的快捷方式:

var d; 
if (!d) { 
    d = {}; 
} 
+0

應該注意的是'var d = d || {}'將始終爲'd'賦值,即使它是當前值(儘管這可以通過智能引擎進行優化)。在'obj.x = obj.x ||的情況下foo',這無法在自定義getter/setter中進行優化,但這是一個不同的故事......有點。 – 2011-10-18 23:06:21

3

如果左手側是falsy(如undefined,它的功能參數是如果不通過它),它的計算結果的右手側。評估的最後一面是使用JavaScript返回的,不像某些語言返回truefalse。這很方便,爲什麼使用這種結構。它使用short circuit evaluation

它被使用的主要原因是提供一個合理的默認值,如果一個函數的參數沒有通過。

var a = function(b) { 
    b = b || []; 
} 

在前面的代碼例如,如果b沒有通過,默認爲一個空白陣列([])。但是,如果我通過0或其他falsy,它也會變成空白陣列。小心這個。

+0

@pst我做了'Array'代碼示例,因爲它是一個數組構造函數,和實際類型/在語言中的對象。 – alex

+0

是的,這個結構很常用,但是當'0','false'和空字符串是給定上下文的合法值時它會咬你。 –

+0

@alex不知道它是否再次缺乏樂觀的併發性......我只是試圖格式化更大的代碼塊。 – 2011-10-18 23:36:08