Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(myVar&;foo())在JavaScript中是什么意思?_Javascript_Operators_Logical Operators - Fatal编程技术网

(myVar&;foo())在JavaScript中是什么意思?

(myVar&;foo())在JavaScript中是什么意思?,javascript,operators,logical-operators,Javascript,Operators,Logical Operators,上面的代码是什么意思?它相当于什么 我认为它只在一行上运行。这是一个表达式,相当于“如果myVar不是false,则运行函数foo()。 如果像这样使用:var x=(myVar&&foo()),结果将是: 如果myVar不是false,那么x将被设置为foo()的输出。如果myVar为false,那么x将被设置为myVar的值。该表达式巧妙地利用了布尔表达式中的短路。foo()仅在myVar的计算结果为true时执行 (myVar && foo()) 更清楚。在某些情况下,这

上面的代码是什么意思?它相当于什么


我认为它只在一行上运行。

这是一个表达式,相当于“如果myVar不是false,则运行函数foo()。 如果像这样使用:
var x=(myVar&&foo())
,结果将是:


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

该表达式巧妙地利用了布尔表达式中的短路。foo()仅在myVar的计算结果为
true
时执行

(myVar && foo())
更清楚。在某些情况下,这类代码可能是有意义的,但样式检查器(如果您对这类事情感兴趣的话)会对其产生影响。看见避免依赖分号插入和表达式语句是一种很好的做法


编辑:注意
var x=a&&b()在某些情况下可能不是一个坏主意。然而,
(a&&b())
本身在几个方面是错误的。(分号插入,表达式语句,除了语义上不明确外)

如果
myvar
为假,表达式的计算结果为
myvar
,如果
myvar
为真。以下代码片段几乎相同

if (myVar) {
    foo();
}
只有在myVar不为false时才会调用foo()函数:这意味着它不能为false、“、0、null或未定义。(还有其他的吗?)

更典型的例子是:

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

if(myvar){ var x = foo(); } else { var x = myvar; }
这被解释如下

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

(在“console”前面加上“window”很重要。因为,如果console未定义,您将得到一个JavaScript错误,而不是false。)


“…调用“console”对象上的“log”方法。”

当对和进行求值时,首先对左手进行求值,即
myVar
,如果这是真的,则只对右手进行求值,即
foo()
。这是因为在语句a&&B中,如果a为false,则表达式a&&B的计算结果将始终为false

上述声明通常以以下方式使用:

window.console && console.log("some helpful debug info");
这也可以写成:

var x = myVar && foo();

“利用”“愚蠢”这是一些强有力的字眼:)如果你经常使用JS,它是有意义的,而且很清楚。当然,在某些情况下,这样的代码并不愚蠢。例如在
if(enabled&&isVisible())的上下文中……
或类似的情况下。确实是强有力的词语!:)然而,如果它写得合理,这个问题甚至不需要存在,是吗?引用Crockford的话,“JavaScript允许任何表达式用作语句。这可以掩盖一些错误,特别是在插入分号的情况下。”@Grumdrig Yup!那确实读得很好。然而,这是一个表达式语句,而且写得不是很清楚。jQueryUI的代码经常使用
condition&&action()。是的,在我看来,这是一个糟糕的做法。如果myvar是truthy,那么x没有设置为true,它设置为foo()的值,不管是什么。这不太正确。如果myVar为0,那么x设置为0,而不是false。“还有其他的吗?”我想只有-0和NaN。@Jason:
0
NaN
,一个零长度字符串,
未定义的
null
,当然
false
都是假的……啊,我在写的时候想到了NaN,但忘了键入它。谢谢
if myVar is truee x = foo(), else x = false