variableFoo&&;functionBar()在javascript中有什么用途?
我最近遇到了一些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();
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好的,我想已经修好了。