如何解释复杂的三元运算符?

时间:2016-11-27 01:05:57

标签: javascript if-statement syntax conditional-statements

我有这个条件:

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

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

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

2 个答案:

答案 0 :(得分:2)

JavaScript ternary operator的工作原理如下:

condtion?如果condition为true则返回值:如果condition为false则返回值

你所拥有的是" true"中的嵌套三元运算符。部分,所以你的代码:

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

可以被认为是这样分组:

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

因此,首先评估嵌套部分:

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

如果con2con3为真,"蓝色"退回 如果没有,"白色"被退回

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

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

现在,如果con1为真,"蓝色"或"白色" (返回嵌套三元中的任何一个)。

如果没有,"绿色"归还。

答案 1 :(得分:1)

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 

如果condition为true,则执行expr1 else expr2。

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

在Scott的评论后更新:

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