0

我与三元运算符一起工作,但以前从未见过这样的事情:

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

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

4

2 回答 2

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);

(是的,我可能会把它拆开,至少用括号和换行符。没有必要让那些试图阅读代码的人变得艰难。)

于 2013-09-22T15:01:59.073 回答
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);
于 2013-09-22T15:13:52.997 回答