这个 if 语句如何与逗号一起使用?
Posted
技术标签:
【中文标题】这个 if 语句如何与逗号一起使用?【英文标题】:How is this if statement working with comma? 【发布时间】:2016-05-04 04:04:42 【问题描述】:有一个if语句
if ((sliding || "Window" == type) &&
nbCasement % 2 != 1 || sliding || "Garage" == type || f(
name: "hinge"
),
nbCasement > 0 && !sliding && f(
name: "side"
),
d && apiProperty)
&&
||
和 ,
我认为这段代码是一样的:
f(
name: "hinge"
);
f(
name: "side"
);
if ((sliding || "Window" == type) &&
nbCasement % 2 != 1 || sliding || "Garage" == type ||
nbCasement > 0 && !sliding &&
d && apiProperty)
但结果和我想的不一样。
这个语句是如何工作的?
f(name:xxx)
运行的条件是什么?
f
定义为
var e = []
, f = function(a)
d && d.blackList && d.blackList[a.name] || e.push(a)
;
【问题讨论】:
一些上下文可能对我们有所帮助... 如果您解释一下为什么您认为这些代码 sn-ps 是等价的,这也会有所帮助,以便更容易判断您的思维过程的哪一部分是错误的。例如,为什么你认为f()
调用都会一直运行(并且它们的返回值会被丢弃)?
你在哪里找到这个代码?在一些缩小的脚本中?这将解释格式。
@Bergi 是的。从缩小的脚本。很难理解
@Juhana 因为从这里开始 ***.com/a/5348007/1204882 。我认为f()
总是运行。
【参考方案1】:
comma operator 只计算所有内容,然后返回最后一个值。你的 sn-p 相当于
(sliding || "Window" == type) && nbCasement % 2 != 1 || sliding || "Garage" == type || f(
name: "hinge"
);
nbCasement > 0 && !sliding && f(
name: "side"
);
if (d && apiProperty)
可以清理和美化为
if (!sliding)
if (("Window" != type || nbCasement % 2 == 1) && "Garage" != type)
f(
name: "hinge"
);
if (nbCasement > 0)
f(
name: "side"
);
if (d && apiProperty)
【讨论】:
谢谢!但忘记sliding
。为什么nbCasement > 0 && !sliding && f( name: "side" );
== if (nbCasement > 0) f( name: "side" );
查看here,注意这部分变成了if (!sliding) if (nbCasement > 0) f(…);
以上是关于这个 if 语句如何与逗号一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 return 0 或 break 不能与逗号运算符一起使用?
将逻辑运算符与 If 语句一起使用不会输出预期的结果 [重复]