有多个问号&引用;和冒号“:&引用;在一个语句中,是用javascript解释的吗?(条件运算符)

有多个问号&引用;和冒号“:&引用;在一个语句中,是用javascript解释的吗?(条件运算符),javascript,conditional,conditional-operator,Javascript,Conditional,Conditional Operator,我知道如何解释简单的条件语句,比如 condition ? expr1 : expr2 但我想知道这种说法是如何解释的 function arc() { ... return da >= d3_svg_arcMax ? r0 ? "String1" : "String2" : r0 ? "String3" : "String4"; } 不用解释这个冗长的表达。我只需要知道当多个问号和冒号一起使用时,如本例中所示,这意味着什么 谢谢你Javascript是右关联的,所以

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

condition ? expr1 : expr2 
但我想知道这种说法是如何解释的

function arc() {
    ...
    return da >= d3_svg_arcMax ? r0 ? "String1" : "String2" : r0 ? "String3" : "String4";
}
不用解释这个冗长的表达。我只需要知道当多个问号和冒号一起使用时,如本例中所示,这意味着什么


谢谢你

Javascript是右关联的,所以你从右到左“解析”三元组。

Javascript是右关联的,所以你从右到左“解析”三元组。

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

这使得我们更容易看出,如果
a
是真实的,那么foo将是
b
d
如果
c
是真实的,或者
e
不是真实的。

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


这使我们更容易看出,如果
a
是真实的,
d
如果
c
是真实的,或者
e
不是真实的,foo将是
b

这里我找到了一个很好的问题答案:


在这里,我找到了一个很好的问题答案:



“我只需要知道当多个问号和冒号一起使用时(如本例中所示)意味着什么。”->Maintenancenightmare@JamesThorpe如果他们用
()
来包装这些,那就更好了。尽管如此,if-else还是有助于提高可读性。如果所有冒号和问号都像其他运算符一样从右向左解释,@gcampbell可能会重复?这里已经很好地回答了这个问题:“我只需要知道当多个问号和冒号像本例中一样一起使用时,这意味着什么。”->维护nightmare@JamesThorpe如果他们用
()
来包装这些,那就更好了。尽管如此,if-else在可读性方面还是很有吸引力的。如果所有冒号和问号都像其他操作符一样从右到左解释,@gcampbell可能是重复的?这已经在这里得到了很好的回答,非常好的一点。您也可以在最里面的条件上使用括号,以减少占用的行数,但正如您所说,使用多行是您能够半清楚地阅读此内容的唯一方法。一个迷你们无论如何都会恢复它,所以它不需要任何费用。这与他所问的语法不完全匹配。他有多个?标记在任何冒号之前。@Netside不重要。我的例子很可能是
foo=a?Bc:d:e。这只取决于你把第二个条件放在第一个条件的哪一部分。这对提问的人来说很重要。如果它与他所看到和询问的不符,他可能无法理解——不要听起来粗鲁或其他什么。var foo不就是一个吗?b:c?d:e;与foo=a不同?Bc:d:e@Netside是的,这是公平的,但正如我所说的,这主要是对公认答案的补充。非常好。您也可以在最里面的条件上使用括号,以减少占用的行数,但正如您所说,使用多行是您能够半清楚地阅读此内容的唯一方法。一个迷你们无论如何都会恢复它,所以它不需要任何费用。这与他所问的语法不完全匹配。他有多个?标记在任何冒号之前。@Netside不重要。我的例子很可能是
foo=a?Bc:d:e。这只取决于你把第二个条件放在第一个条件的哪一部分。这对提问的人来说很重要。如果它与他所看到和询问的不符,他可能无法理解——不要听起来粗鲁或其他什么。var foo不就是一个吗?b:c?d:e;与foo=a不同?Bc:d:e@Netside是的,这很公平,但正如我所说,这主要是对公认答案的补充。这里的括号是什么:
da>=d3\u svg\u arcMax?r0?“Z”:“M0”:r0?“M”:“M”像@Saman,我也还在想这个。我看到的代码在冒号之前有两个问号,但是这里的所有答案都没有给出这方面的例子。下面是我发现的一个例子,让我感到困惑:@Netside这就是为什么你永远不应该这样做。在您链接的示例中,如果
elem
是truthy,并且它不是数组返回
streamrollarray(arr,[elem,…flatArr])
如果它是数组返回
streamrollarray(arr.concat(elem),flatArr)
并且如果
elem
不是truthy返回
flatArr
。即使你知道三元的工作原理,你仍然需要停下来,花一分钟的时间,在你的头脑中描绘出控制流程。PITAHow将是这里的括号:
da>=d3\u svg\u arcMax?r0?“Z”:“M0”:r0?“M”:“M”像@Saman,我也还在想这个。我看到的代码在冒号之前有两个问号,但是这里的所有答案都没有给出这方面的例子。下面是我发现的一个例子,让我感到困惑:@Netside这就是为什么你永远不应该这样做。在您链接的示例中,如果
elem
是truthy,并且它不是数组返回
streamrollarray(arr,[elem,…flatArr])
如果它是数组返回
streamrollarray(arr.concat(elem),flatArr)
并且如果
elem
不是truthy返回
flatArr
。即使你知道三元的工作原理,你仍然需要停下来,花一分钟的时间,在你的头脑中描绘出控制流程。皮塔提斯实际上对我很有帮助。这是什么原因被否决的?就因为它是一个没有答案的链接吗?@Netside我也这么认为,是的。只有链接的答案是不可接受的。这实际上对我很有帮助。这是什么原因被否决的?只是因为它是一个没有答案的链接
var foo = a ?
  b:
  c ?
    d:
    e;