嵌套三元运算符

时间:2017-05-24 16:28:39

标签: javascript ternary-operator

我正在尝试写一个if if else if

(!contract.hasOwnProperty('COMMIT_CONTRACT') ? '1') : (contract.hasOwnProperty('COMMIT_CONTRACT') ? '2' : '3')

然而,这未能评估。

我开始时:

(!contract.hasOwnProperty('COMMIT_CONTRACT')) ? '1' : '2')

但根据这里你可以链接它们:javascript shorthand if statement, without the else portion

但它没有正确评估。我做错了什么,如何解决?

2 个答案:

答案 0 :(得分:1)

  

你搞砸了括号(())。

根据我的理解,
这是您的第一个条件:!contract.hasOwnProperty('COMMIT_CONTRACT')
第一个条件的if部分是'1'
您的第一个条件的else部分是第二个条件:contract.hasOwnProperty('COMMIT_CONTRACT')
第二个条件的if部分为'2'
else的第二个条件是'3'

让我们添加一些括号,使我们以及编译器更具可读性,

( !contract.hasOwnProperty('COMMIT_CONTRACT') ) ? '1' : ( contract.hasOwnProperty('COMMIT_CONTRACT') ? '2' : '3' )

有趣的是,你永远不会得到'3'

答案 1 :(得分:1)

你不需要围绕一切的所有()。这样可以正常工作:

var variable = !contract.hasOwnProperty('COMMIT_CONTRACT') ? '1' : contract.hasOwnProperty('COMMIT_CONTRACT') ? '2' : '3';