(myVar&& foo())在JavaScript中意味着什么?

时间:2010-01-11 22:31:54

标签: javascript operators logical-operators

(myVar && foo())

上述代码是什么意思?它等同于什么?

我认为它只能在一条线上运行。

5 个答案:

答案 0 :(得分:8)

如果myvar为假,则表达式评估为myvar;如果foo()为真,则表达式为myvar。以下片段几乎完全相同。

var x = (myvar && foo());

if(myvar){ var x = foo(); } else { var x = myvar; }

答案 1 :(得分:4)

它是一个表达式,等于“如果myVar不是假的,运行函数foo()”。 如果它使用如下:var x = (myVar && foo()),结果将是:

如果myVar不是假的,x将被设置为foo()的输出。如果myVar是假的,那么x将被设置为myVar的值。

答案 2 :(得分:3)

仅当myVar不是 falsey 时才会调用foo()函数:这意味着它不能为false,“”,0,null或undefined。 (还有其他人吗?)

更典型的是看到这样的例子:

window.console && console.log("some helpful debug info");

这解释如下......

“如果'window'变量有一个名为'console'的成员......”

(将'console'加上'window'是很重要的,因为如果未定义控制台,你将得到一个JavaScript错误而不是false。)

“...在'console'对象上调用'log'方法。”

答案 3 :(得分:1)

该表达式巧妙地在布尔表达式中使用短路。 foo()只有在myVar求值为true时才会执行。

if (myVar) {
    foo();
}

更清楚。有可能这种代码有意义,但样式检查器(如果你对这类事情感兴趣)会对它有所帮助。见http://javascript.crockford.com/code.html。避免依赖分号插入和表达式语句是一种很好的做法。

编辑:请注意var x = a && b();在某些情况下可能不是一个坏主意。但是,(a && b())本身在某些方面是错误的。 (分号插入,表达声明,除了语义上的神秘之外)

答案 4 :(得分:0)

当&&评估左手首先评估,即myVar,如果这是真的那么只评估右手,即foo()。这是因为声明A&& B如果A为假,那么表达式A& B将始终评估为假。

以上陈述通常以下列方式使用:

var x = myVar && foo();

这也可以写成:

if myVar is truee x = foo(), else x = false