在Javascript中使用三元运算符

时间:2013-09-22 14:59:38

标签: javascript if-statement ternary-operator

我曾与三元运营商合作过但从未见过类似的东西:

.replace('{{name}}', ticket['areaName'] ? ticket['areaName'] : !area && ticket['catName'] ? ticket['catName'] : '--')

任何人都可以将其翻译成人类语言或标准,如果是其他伪代码吗?

2 个答案:

答案 0 :(得分:3)

它只是一个条件运算符表达式,其中第三个操作数中的表达式是另一个条件运算符表达式:

var temp;
if (ticket['areaName']) {              // First conditional's first operand (test)
    temp = ticket['areaName'];         // First conditional's second operand (true case expression)
}
// All of the following is the first conditional's third operand (the false case expression)
else if (!area && ticket['catName']) { // Second conditional's first operand (test)
    temp = ticket['catName'];          // Second conditional's second operand (true case expression)
}
else {
    temp = '--';                       // Second conditional's third operand (false case expression)
}
/*...*/.replace('{{name}}', temp);

(是的,我可能会打破它,至少是用parens和换行符。不需要让那些试图阅读一个代码的人生活困难。)

答案 1 :(得分:2)

让我们稍微美化你的代码,以便你可以轻松地将它可视化:

.replace('{{name}}', ticket['areaName']   // if
                        ? ticket['areaName']   // then
                        : !area && ticket['catName']  // else if
                               ? ticket['catName']    // then
                               : '--')                // else

因此,第一个条件运算符的第三个表达式本身就是一个条件运算符。它基本上是if-else if-else阶梯:

var replacement;

if (ticket['areaName']) {
    replacement = ticket['areaName'];
} else if (!area && ticket['catName']) {
    replacement = ticket['catName'];
} else {
    replacement = '--';
}

.replace('{{name}}', replacement);