有多个问号&引用;和冒号“:&引用;在一个语句中,是用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;