回答
表达式求myvar
如果myvar
是falsey,和foo()
如果myvar
是truthy。以下片段几乎完全相同。
var x = (myvar && foo());
if(myvar){ var x = foo(); } else { var x = myvar; }
它是一个表达式,等同于“如果myVar不是falsey,运行函数foo()”。 如果使用像这样:var x = (myVar && foo())
,结果将是:
如果myVar不是falsey,x将被设置为foo()的输出。如果myVar是falsey,那么x将被设置为myVar的值。
该表达式巧妙地使用了布尔表达式中的短路。只有当myVar的值为true
时,foo()才会执行。
if (myVar) {
foo();
}
更清晰。有些情况下这种代码是有意义的,但是风格检查器(如果你对这种事感兴趣的话)会适合它。请参阅http://javascript.crockford.com/code.html。避免依赖分号插入和表达式语句是一种很好的做法。
编辑:请注意,在某些情况下,var x = a && b();
可能不是一个坏主意。然而,(a && b())
本身在几个方面是错误的。 (分号插入,表达式语句,除了在语义隐蔽)
,把foo()函数才会被调用,如果myVar的不falsey:这意味着它不能是假的, “”,0,null或未定义。 (任何其他方面?)
这是比较典型的,看这样一个例子:
window.console && console.log("some helpful debug info");
这被解释如下...
“如果‘窗口’变量有一个成员叫'控制台” ......‘
(前缀是很重要的‘控制台’与‘窗口’。因为,如果控制台是不确定的,你会得到一个JavaScript错误,而不是假的。)
’...在在'控制台'对象上唤醒'log'方法。“
*“其他人?”*我认为只是-0和NaN。 – 2010-01-11 22:55:54
@Jason:'0','NaN',一个零长度的字符串,undefined,null和false当然是虚假的...... – CMS 2010-01-11 23:00:09
啊,在我写作时想到了NaN,但是忘了输入。谢谢! – 2010-01-11 23:03:07
当& &被评估左手首先计算即myVar
,如果这是真,那么只有右手侧被评估即foo()
。这是因为如果A为假,那么表达式A & & B将始终评估为假。
上面的语句以下列方式通常用于:
var x = myVar && foo();
这也可以写成:
if myVar is truee x = foo(), else x = false
- 1. $$('foo')在JavaScript源代码中的含义是什么?
- 2. '</'在JavaScript中的含义是什么?
- 3. @const在JavaScript中的含义是什么?
- 4. “=>”在JavaScript中的含义是什么?
- 5. $$在JavaScript中的含义是什么?
- 6. @cc_on在JavaScript中的含义是什么?
- 7. $(document.body)在javascript中的含义是什么?
- 8. foo :: bar :: baz()在C++中的含义是什么?
- 9. 为什么null == myVar而不是myVar == null?
- 10. 为什么myVar未定义?
- 11. javascript中的含义是什么
- 12. “foo不包含'bar'的定义...”是什么意思?
- 13. 对象[foo]术语的含义是什么?
- 14. 在JavaScript中显式隐含的含义是什么?
- 15. 什么是AS3中的Foo?
- 16. “$”的含义是什么意思javascript
- 17. 在Javascript中,使用var foo = function foo(i){...}的动机或优势是什么?
- 18. Foo()和Foo()是什么样的数组?
- 19. Kornshell变量定义:什么是?FOO?
- 20. “===”在JavaScript/Jquery中暗含的是什么?
- 21. _._在包装中的含义是什么?
- 22. “++”在PHP中的含义是什么?
- 23. tipbot在LKML中的含义是什么?
- 24. information_schema.TABLES.DATA_FREE在MySQL中的含义是什么?
- 25. * width:auto在CSS中的含义是什么?
- 26. 什么是::在签名中的含义?
- 27. $$在shell中的含义是什么?
- 28. *〜在glob中的含义是什么?
- 29. uv.zw在HLSL中的含义是什么?
- 30. “LBS”在WAI中的含义是什么?
如果MYVAR是truthy X没有设置正确,其置为foo()的值,无论可能如何。 – brad 2010-01-11 22:42:35
这不太对。如果myVar是0,那么x被设置为0,而不是false。 – 2010-01-11 22:45:30
你们都是对的。答复修正。 – glomad 2010-01-11 23:05:53