【问题标题】:How to interpret a complex ternary operator?如何解释一个复杂的三元运算符?
【发布时间】:2017-04-11 00:35:13
【问题描述】:

我有这种情况:

con1 ?  (con2 || con3) ? "blue" : "white" : "green"

这是对该代码的正确解释吗?

if con1 = true , then "blue"
if con1 = false, then "white"
if con2 || con3 = true, then "green"
?

【问题讨论】:

  • 您是想理解您在某处找到的陈述还是创建自己的陈述以实现您自己的结果?在这些情况下,答案将大不相同。 (如果您正在尝试实现特定目标,请更新以添加您想要的描述。)
  • 感谢 scott...我想发布我的代码,但我总是无法粘贴代码块
  • 但是我仍然不清楚你是想从你在野外找到的代码中学习还是这是你试图编写的代码来完成你想要完成的事情......和它不太适合你。
  • 如果我们承认这不是家庭作业,而且确实是您编写的代码,那么您为什么要编写您不理解且无法自己解析的代码?如果你不理解这些东西,只需写下你理解的 if then else 语句。

标签: javascript if-statement syntax conditional-statements


【解决方案1】:

JavaScript ternary operator 的工作方式如下:

条件?条件为真时返回值:条件为假时返回值

你所拥有的是“真”部分中的嵌套三元运算符,所以你的代码:

con1 ?  (con2 || con3) ? "blue" : "white" : "green"

可以认为是这样分组的:

con1 ? [ (con2 || con3) ? "blue" : "white" ] : "green"

所以,嵌套部分首先被评估:

(con2 || con3) ? "blue" : "white"

如果con2con3 为真,则返回“蓝色” 如果不是,则返回“白色”

然后将“蓝色”或“白色”放置在整个表达式中嵌套三元组的位置:

con1 ?  "blue" or "white" : "green"

所以现在,如果con1 为真,则返回“蓝色”或“白色”(从嵌套三元组返回的那个)。

如果不是,则返回“绿色”。

【讨论】:

  • @AJ con1 使用数组上的 includes 方法来检查节点是否是它的一部分。 con2 是起始节点,con3 是结束节点。代码用第一种颜色突出显示开始节点和结束节点,这两个节点之间的节点用第二种颜色,其余节点获得三分之一颜色....我的目标是给开始节点和结束节点一个不同的颜色
【解决方案2】:
if con1 is false then "green"
if con1 is true and con2 || con3 is true then "blue"
if con1 is true and con2 || con3 is false then "white"

解释:

条件等价于:

con1 ? ( (con2 || con3) ? "blue" : "white" ) : "green"

其实是这样的:

condition ? expr1 : expr2 

如果条件为真,则执行 expr1,否则执行 expr2。

因此,如果 con1 为真,它将评估:(con2 || con3) ? "blue" : "white" 否则返回“绿色”。

在 Scott 发表评论后更新:

首先评估条件(con2 || con3) ? "blue" : "white" ),然后根据返回的值评估con1 ? [value returned from con2 || con3) ? "blue" : "white"] : "green"

【讨论】:

  • 感谢 AJ!我正在使用它通过鼠标单击突出显示节点。现在我的问题是:con2 和 con3 总是共享相同的颜色,我怎样才能只使用 1 行重写代码以使它们获得不同的颜色?
  • con1 ? ( ((con2 )? (con3) ? "blue" : "white" : "red")) : "green" 这个怎么样?
  • @DerickKolln 最后一个在语法上不正确。
  • @DerickKolln :根据 con1、con2 和 con3 的值应该得到的确切条件是什么?
  • @DerickKolln 如果您希望设置多种颜色,您可以将颜色存储在一个数组中,然后使用可以使用索引的数组成员引用替换表达式中的颜色名称根据其他一些标准进行更改。
猜你喜欢
  • 2015-09-05
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多