【问题标题】:How multiple question marks "?" and colons ":" in one statement are interpreted in javascript? (Conditional Operators)多个问号“?”一个语句中的冒号“:”在javascript中解释? (条件运算符)
【发布时间】:2016-12-16 23:01:50
【问题描述】:

我知道如何解释简单的条件语句,例如

condition ? expr1 : expr2 

但我想知道这样的陈述是如何解释的?

function arc() {
    ...
    return da >= d3_svg_arcMax ? r0 ? "String1" : "String2" : r0 ? "String3" : "String4";
}

这个长句不用解释了。我只需要知道当多个问号和冒号一起使用时意味着什么,就像在这个例子中一样。

谢谢

【问题讨论】:

  • " 我只需要知道当多个问号和冒号一起使用时意味着什么,就像这个例子一样。" -> 维护噩梦
  • @JamesThorpe 如果他们使用() 来包装这些会更好。尽管如此,if-else 对可读性还是很有帮助的。
  • @gcampbell 是否应该像其他运算符一样从右到左解释所有冒号和问号?
  • 这里已经很好回答了stackoverflow.com/questions/7407273/…

标签: javascript conditional conditional-operator


【解决方案1】:

Javascript 是右关联的,因此您从右到左“解析”三元组。

【讨论】:

  • 这里的括号怎么样:da >= d3_svg_arcMax ? r0 ? "Z" : "M0" : r0 ? "M" : "M";
  • 像@Saman 一样,我也在想这个。我看到的代码在任何冒号前都有两个问号,但这里的所有答案都没有给出这个例子。这是我发现的一个示例,我对此感到困惑:pastebin.com/FuHJyHyS
  • @Netside 这就是为什么你永远不应该这样做。在您链接的示例中,如果elem 是真实的并且它不是数组返回steamrollArray(arr, [elem, ...flatArr]) 如果它是一个数组返回steamrollArray(arr.concat(elem), flatArr) 并且如果elem 不是真实返回flatArr。即使您知道三元的工作原理,您仍然必须停下来,花一点时间,在脑海中映射控制流。皮塔饼
【解决方案2】:

首先,

永远不要这样做。曾经。为了补充泰勒的(正确)答案,如果您无法抗拒警笛声,那么使用缩进对事物进行分组是更可取的(对于“首选”的某些定义)。

var foo = a ?
  b:
  c ?
    d:
    e;

如果a 为真,则更容易看到 foo 为b,如果c 为真,则de 否则会更容易一点。 p>

【讨论】:

  • 好点。您也可以在最里面的条件上使用括号来减少行数,但正如您所说,使用多行是您能够半清楚地阅读此内容的唯一方法。无论如何,缩小器都会将其还原,因此无需任何费用。
  • 这与他所询问的语法不完全匹配。他有多个?任何冒号前的标记。
  • @Netside 没关系。我的例子很容易是foo = a ? b ? c : d : e;。这仅取决于您将第二个条件放入第一个条件的哪个部分。
  • 对提问的人来说确实很重要。如果它与他所看到和询问的内容不符,他可能无法理解——不要听起来粗鲁或其他任何事情。不是 var foo = a 吗?乙:丙? d: e;与 foo = a 不同?乙? c:d:e;?
  • @Netside 是的,这很公平,但正如我所说,这主要是对已接受答案的补充。
【解决方案3】:

【讨论】:

  • 这实际上对我很有帮助。这被否决的原因是什么?仅仅因为它是一个没有答案的链接?
  • @Netside 我想这么多,是的。仅链接答案在 SO 上是不可接受的。
猜你喜欢
  • 2011-11-18
  • 2021-08-15
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
相关资源
最近更新 更多