【问题标题】:How is this if statement working with comma?这个 if 语句如何与逗号一起使用?
【发布时间】: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 因为从这里开始 stackoverflow.com/a/5348007/1204882 。我认为f() 总是运行。

标签: javascript if-statement


【解决方案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({…}); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
相关资源
最近更新 更多