variableFoo&&;functionBar()在javascript中有什么用途?

variableFoo&&;functionBar()在javascript中有什么用途?,javascript,comparison,expression,Javascript,Comparison,Expression,我最近遇到了一些Javascript代码,如下所示: var foo = 'blah'; bar = function(){ // append some content to the body } doStuff = function(){ if(somethingIsTrue){ // do something } else { // do something else } foo && bar();

我最近遇到了一些Javascript代码,如下所示:

var foo = 'blah';

bar = function(){
   // append some content to the body   
}

doStuff = function(){

   if(somethingIsTrue){
    // do something
   } else {
    // do something else       
   }

   foo && bar();
}

doStuff();
foo&&bar()表达式作为“未定义”登录到控制台

我明白了为什么它可以调用bar函数从doStuff函数内部运行,但为什么它被用作foo变量的比较表达式?

它意味着只有在定义了
foo
时才调用
bar()

基本上与:

if (foo){
    bar();
}


Javascript使用短路评估。这意味着,如果
foo
的计算结果为真实值(即它已定义),则它将计算
bar

它利用
和&
的短路逻辑。因为如果
&&
表达式的左侧是
false
,我们已经知道整个表达式的值是
false
,所以我们不需要计算右侧。因此,如果
foo
是falsy,那么它将在左侧求值,如果
foo
是truty,则在右侧求值

简单来说,它可以被认为是:

if (foo) bar();
但它也是一个表达式,所以更像:

foo ? bar() : foo
if (!foo) bar()

您也可以使用
|
执行相反的操作,这更像是:

foo ? bar() : foo
if (!foo) bar()


+1.我认为这是一种很常见的模式,虽然我发现在可读性方面的好处(简短)不值得失去……我同意这种情况下的可读性很差,而且你没有获得太多。“或”版本,IMO,o.k.导致测试缺失数据或空值并使用默认值非常有用,例如
currency=someoption.currency | |“dollars”
@user949300我认为
在这种情况下没有意义,因为
foo
是计算
bar()
@remyabel我认为user949300只是在谈论使用
|
作为分配默认值的一种常见做法。与使用
&
作为
if…else
的替代概念类似,但我认为他并不是在暗示它们是可互换的。更准确地说,如果foo是真的,那么它将进行评估bar@Mike好的,我想已经修好了。