2015-11-03 85 views
-1

作爲每https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators爲什麼JavaScript &&運算符返回第二個表達式?

的表達式1 || expr2對我有意義。它將表達式短路並返回第一個,這是有道理的。我經常使用它來選擇傳遞的變量與默認的變量。例如。

var default_connection = 'localhost:27017/task_master'; 

function setdb(connection){ 
    var conn_str = connection || default_connection; 
    //Do something here 
} 

&&行爲只是打敗了我,而且對我來說顯得非常難以理解。

expr1 && expr2 - 返回expr1如果它可以轉換爲false;否則,返回expr2

有人可以幫我理解這個,並建議一些使用案例,其中&&可以是有用的。

編輯:從建議的原始問題找到它。這給了我足夠的理由來使用它。

& &有時被稱爲警衛操作員。

變量=指示器& &值

它可以被用來設置僅當指示器是truthy值。

我的問題是,「有人可以幫我理解這一點,並建議一些使用案例,其中&&可以是有用的。」我不知道這個問題的哪一部分很難理解。我舉了一個我如何找到||的例子有用的,以上原因給出了一個足夠好的理由如何& &也可以是有用的。是的,我是JavaScript新手,是的,我不像你們一樣聰明。但稍微有點兒會幫助我到達那裏。和平!

+0

你在代碼'&&'中看到了什麼? –

+0

@David Haim:代碼屬於'||'。他總是在問&& &&。請注意,他甚至要求'&&'的例子 - 顯然,他不知道任何。 – BoltClock

+0

「爲什麼JavaScript &&運算符返回第二個表達式?」因爲,作爲一個邏輯與,爲了第二個表達式甚至被認爲是第一個必須是真的,否則它會短路。這與||沒有什麼不同工作 - 當expr1是虛假的,那麼它會返回expr2,就像expr1真實時&&所做的那樣。 – BoltClock

回答

3

它停在一個錯誤的值的值,並返回一個值(我認爲這更清楚這種方式)。這對於嵌套對象非常有用。假設你可能有一個這樣的對象,但支撐還是nestedProp可能不存在:

var a = { 
    prop : { 
    nestedProp : { 
     hello : 'hello' 
    } 
    } 
} 

現在,如果我們需要檢查的nestedProp

字符串裏面你不能說:

if(a.prop.nestedProp.hello === 'hello') 

因爲propnestedProp可能沒有定義,如果你試圖做這個檢查,你會得到TypeError

所以,你這樣做:

if(a.prop &&.prop.nestedProp && a.prop.nestedProp.hello === 'hello') 

這將會是嘗試分配hello道具同樣的事情:

var hello = a.prop && a.prop.nestedProp && a.prop.nestedProp.hello; 

如果a.prop是不確定它會停在那裏和返回undefined。如果它是一個真值,那麼它將評估a.prop.nestedProp,如果它是一個虛假值,那麼它將返回,否則它返回a.prop.nestedProp.hello

+0

一個很好的例子@MinusFour。感謝分享! –

0

的短路性質是仲和不太重要的 - 首先||代表邏輯or而& &代表邏輯and

因爲兩者都是懶惰的,他們可以在結果被清除後停止評估,這是次要行爲的來源。當第一個值or爲真時,不需要評估第二個值。當第一個值and爲假時,不需要評估第二個值。

0

讓我們看看a && b的所有值ab的可能結果。

如果a = falseb = false然後 a && b = false其等於a
如果a = falseb = true然後 a && b = false其等於a
如果a = trueb = false然後 a && b = false其等於b
如果a = trueb = true然後 a && b = true這等於b

所以當afalse,表達a && b將根據其性質返回false。所以如果a如果false我們只需要返回它。

atrue,表達a && b將僅依賴的b值,即,如果trueb = true如果falseb = false。 這意味着在atrue,我們只需要返回b

相關問題