2014-07-16 21 views
0
var connections = {key: 1234} 
var thisconnection = connections["key"] || {status:"new"};` 

在上面的代碼中,變量thisconnection進行邏輯運算'||'變量thisconnection的值和HOW是什麼?

當我簡單地鍵入在控制檯下面的代碼,thisconnection需要在任何情況下connections["key"]的值。

+1

我不明白這個問題。由於連接[「key」]有價值,因此條件的結果將是其值。如果不是,它最終會成爲具有「狀態」鍵/值的匿名對象。 –

+0

下面的答案給了你一個解釋,但是這行代碼本身有點奇怪,因爲你將該值設置爲整數或對象。通常情況下,您會希望兩個選項都是相同的類型,以便通過代碼進一步持續使用它們。 – Paddy

回答

1

在下面的語句

var thisconnection = connections["key"] || {status:"new"}; 

你的意思是,如果connection["key"]存在分配給connection["key"]thisconnection,其他明智分配{status:new}thisconnection

這是同下面的代碼

if(connections["key"]){ 
    thisconnection = connection["key"] 
} 
else{ 
    thisconnection = {status:new} 
} 
1

如果connections["key"]是零,然後{status:"new"}將是可變

2

值你爲什麼不試試呢?

var connections = {key: 1234}; 
var thisconnection = connections["key"] || {status:"new"}; 
console.log(thisconnection); // returns 1234 

說明:

如果connections.key返回0,NaN時,假,未定義, 「」(空字符串),或評估爲假任何值,但將繼續評估下一個||表達。

然而,如果表達式求值truthy,整個語句完成了評估。這被稱爲short-circuiting

  • 假& &(任何)是:

    作爲邏輯表達式進行求值從左到右,它們是爲可能的「短路」的評價使用以下規則測試短路評估爲錯誤。

  • true || (任何事物)都被短路評估爲真。

由於1234是truthy值,評價停止,值1234被分配。

1

首先,它會檢查connections["key"]

如果不爲空,則thisconnection與價值包含的connections["key"]值。否則thisconnection將包含值{status:"new"}

1

在JavaScript中,在變量賦值使用時||&&運營商擁有特定的行爲。如果你有這樣的事情:

var theResult = a || b || c || d; 

然後,變量theResult將不會像我們預期的其他語言的布爾值。

If a is truhty,then theResult = a。否則,如果b是truhty,那麼theResult = b。等等......如果所有變量都是虛假的,那麼theResult = d因爲d是或條件中的最後一個語句。

規則如下:

theResult值將是變量的值a || b || c || d其掙脫鎖鏈

所以,既然我們只有OR條件,那麼第一個值決心到true將打破連鎖。我的意思是,如果a === true,那麼它不需要評估其餘的條件,因爲true || false || whatEver || weDontCare將永遠是true。如果沒有變量打破鏈條,則最後一個變量被分配到theResult