(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