可能重複:
What does this construct (x = x || y) mean?javascript:|| (或)在變量定義?
了很多次,我可以看到,變量設置一樣,
var d = d || {}
或
var = var || []
想到了幾個問題
- 它的主要用途是什麼?
- 如何在變量定義中使用OR?
可能重複:
What does this construct (x = x || y) mean?javascript:|| (或)在變量定義?
了很多次,我可以看到,變量設置一樣,
var d = d || {}
或
var = var || []
想到了幾個問題
||
運算符返回左側(如果爲真),右側(如果左側不正確)則返回右側。
所以:
var d = d || {}
跟它的快捷方式:
var d;
if (!d) {
d = {};
}
如果左手側是falsy(如undefined
,它的功能參數是如果不通過它),它的計算結果的右手側。評估的最後一面是使用JavaScript返回的,不像某些語言返回true或false。這很方便,爲什麼使用這種結構。它使用short circuit evaluation。
它被使用的主要原因是提供一個合理的默認值,如果一個函數的參數沒有通過。
var a = function(b) {
b = b || [];
}
在前面的代碼例如,如果b
沒有通過,默認爲一個空白陣列([]
)。但是,如果我通過0
或其他falsy,它也會變成空白陣列。小心這個。
@pst我做了'Array'代碼示例,因爲它是一個數組構造函數,和實際類型/在語言中的對象。 – alex
是的,這個結構很常用,但是當'0','false'和空字符串是給定上下文的合法值時它會咬你。 –
@alex不知道它是否再次缺乏樂觀的併發性......我只是試圖格式化更大的代碼塊。 – 2011-10-18 23:36:08
應該注意的是'var d = d || {}'將始終爲'd'賦值,即使它是當前值(儘管這可以通過智能引擎進行優化)。在'obj.x = obj.x ||的情況下foo',這無法在自定義getter/setter中進行優化,但這是一個不同的故事......有點。 – 2011-10-18 23:06:21