2011-07-07 62 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。