2010-08-25 86 views
31

什麼下面的代碼做Java腳本:什麼是var x = x || {};

var x = x || {}; 
+0

這個問題是舊的一個,另一個是重複的。 – 2016-11-10 16:44:57

+0

JavaScript中的邏輯表達式從左到右進行評估,並使用以下規則對它們進行可能的「短路」評估:false &&(anything)short-circuit評估爲false。真|| (任何事物)都被短路評估爲真。在上面的例子中,如果x爲真,則x變爲分配的值。如果x爲假或未定義,則第二個操作數變爲{}的分配。 – tony 2017-08-06 20:46:08

回答

7

如果x是不確定的(或空,或任何其他false值),它成爲一個空對象。

2

分配x到一個新的空對象,如果它是null(未定義,false)還是保持它現有的值,如果不null

40

||是合乎邏輯的OR

表達

var x = x OR {}; 

應該變得更明顯然後。

如果xfalsy值(如nullundefined0""),我們分配x空對象{},否則只要保持當前值。這樣做的長版會是什麼樣子

var x = x ? x : {}; 
+1

優秀的答案。我是一個C程序員,這沒有任何意義。 – jakoh 2010-08-25 06:13:20

+2

如果這對你沒有任何意義,那麼你也可以注意'!! value',它返回一個代表'value'真值的布爾值,有時候非常方便。 – 2010-08-25 06:19:31

+0

您的長版本不正確:請考慮x先前已定義並設置爲「null」的情況。 'var x = x || {};'將x重新定義爲一個對象,而'var x =(typeof x!=='undefined')? x:{};'不會。前面的段落是正確的。 – 2010-08-25 15:48:37

0

除非x被定義或賦值將採取空對象爲默認值..

就是

for example 
x = 10 
var x = x || {}; 

輸出必須

10 

如果未指定x值。輸出值必須是

undefined 
-1

如果定義了var x,那麼它將是該定義的值。否則這將是空的對象像[object Object]

例如,在下面的代碼塊,x是10

var x = 10; 
x = x || {} 

然而,如果:

var x = x || {}; 

然後x[object Object]

4

不應該寫「var x = x || {};」本身。

這與「var x = {}」不相同的唯一情況;「是當x在先前在相同範圍內初始化時。這是不道德的。注:

function() { 
    x = {foo:"bar"}; 
    var x = x || {}; 
} 

是一樣的,只不過不是更混亂,

function() { 
    var x = {foo:"bar"}; 
    x = x || {}; 
} 

在兩種情況下是有沒有在全球範圍內的符號「X」的值的任何引用。

這種表達是合法的財產懶初始化成語的困惑變種:

function(foo) { 
    foo.x = foo.x || {}; 
    foo.x.y = "something"; 
} 
相關問題