这个 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 语句一起使用不会输出预期的结果 [重复]

javascript中if语句中的逗号[重复]

逗号运算符如何与 C++ 中的 cout 一起使用?

Python oneliner if 条件与多个语句用逗号和分号分隔

Python:为啥 if-else 一行语句在 else 中不能与 continue 一起使用?