【发布时间】:2015-02-10 22:48:32
【问题描述】:
我试图理解大量使用逗号分隔表达式的脚本。例如:
popup_window != is_null && ("function" == typeof popup_window.close && popup_window.close(), popup_window = is_null);
如果逗号分隔的意思是“评估以下所有表达式,然后产生最终表达式的值”是真的(如this SO answer),这是另一种形式的 if 语句吗?
喜欢:
"如果 popup_window 不为 null 且 popup_window.close 是一个方法,则调用此方法并将 popup_window 设置为 null"
无论如何,我不确定我是否理解语法。
问题:
这句话是什么意思,逗号分隔是怎么回事?这应该是一个 if 语句吗?
谢谢!
【问题讨论】:
-
这只是使用 AND 来检查多个语句的一种聪明(太聪明)的方式,如果它们都是真实的,它会到达逗号用作运算符的末尾,如果 @ 987654324@返回truthy(如果存在则返回popup),变量
popup_window设置为is_null,根据语句可能是null。 -
没错,就像
if ( truthy && falsy && truthy ),最后一个永远不会被检查,因为第二个是假的,然后就失败了。 -
这是一个编译后的缩小脚本。获取源代码,没有人会手写。
-
当你写的时候: if( a() && b() && c() ) {} a() 将被测试,如果 a() 返回 true,b() 将被测试,如果b() 返回 true,c() 将在您编写时进行测试: if(a() && b() , c() ) {} a() 将被测试,如果 a() 返回 true b() 将是经过测试,c() 将始终被评估jsfiddle.net/try2d0rj
-
我知道有人在写这样的代码——所以这不需要由 minifiers 生成;)
标签: javascript expression comma