嵌套三元运算符

Nesting ternary operators

我正在尝试写一个长篇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

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

You messed up with parenthesis (()).

据我了解,
这是你的第一个条件:!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'

你不需要所有的 () 围绕一切。这会很好用:

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