2011-07-07 61 views
3

算子的我有一段JavaScript代碼如下:的JavaScript &&在return語句

function main(condition){ 
    if(condition){ 
     doSomething(); 
     return obj; 
    } 
} 

現在我想重構這個代碼,以擺脫「如果」語句。這是我想要做的

function main(condition){ 
    var doSomethingAndReturnObj = function(){ 
     doSomething(); 
     return obj; 
    } 
    return condition && doSomethingAndReturnObj(); 
} 

這裏是我需要幫助的地方。 main函數的調用者期望返回值爲「undefined」或obj。在我的重構的代碼,將我的

返回條件& & doSomethingAndReturnObj();

將返回值轉換爲true和false類型?

感謝您的回覆。

+2

當你嘗試時發生了什麼? – Mat

+1

爲什麼不「返回(condition?doSomethingAndReturnObj():undefined);」 ? – selbie

+0

你忽略了指定'condition'是否總是包含'undefined'或者一個真值。這很重要。 – Shog9

回答

2

JavaScript的&&運營商是合併

js> 0 && 7 
0 
js> 1 && 7 
7 
+0

謝謝!即使我不得不穀歌的什麼凝聚意味着:) –

1

由doSomethingAndReturnObj()返回的值將不被轉換爲真或假。

+0

這有助於解決我的難題,但伊格納西奧有點快回答,所以我會標記他的答案。 –

4

簡短的回答是:不,&&不會將事物轉換爲布爾值。

&&只有繼續如果得到truthy值,返回第一falsy值,或者最後一個值,意思是:

undefined && true == undefined 
true && true  == true 
true && false  == false 
1 && 2 && 3  == 3 
1 && 2 && 0 && 4 == 0 

所以,如果你的條件是falsy,例如falseundefined,它會返回該確切的值。如果你的條件是真的,它會返回任何doSomethingAndReturnObj()回報。參考

falsy值:nullundefined0falseNaN""一切其他是truthy。