使用?:( JavaScript中的条件运算符)的功能说明

时间:2018-07-23 06:28:05

标签: javascript ternary-operator

我试图理解这个函数,当我们给它一个数字时它会返回序数。

不幸的是,我无法弄清楚如何使用条件运算符,有人可以向我解释吗?

function getOrdinalNum(n) {
  return n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');
}

3 个答案:

答案 0 :(得分:3)

解释这种情况的最好方法是使用if语句将其分解为一个函数。看一下newFunction与功能getOrdinalNum所做的相同的事情:

function getOrdinalNum(n) {
  return n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');
}

function newFunction(n) {
  if (n > 0) {
    if ((n > 3 && n < 21) || n % 10 > 3) {
      return n + 'th'; // essentially returning ['th', 'st', 'nd', 'rd'][0]; 
    } else {
      return n + ['th', 'st', 'nd', 'rd'][n % 10];
    }
  }
}

for(let i = 1; i < 9; i++) {
  console.log(getOrdinalNum(i));
  console.log(newFunction(i));
}

答案 1 :(得分:1)

像这样分解它:

n + 
(
 n > 0 
 ? ['th', 'st', 'nd', 'rd']
     [
       (n > 3 && n < 21) || n % 10 > 3 
       ? 0 
       : n % 10
     ] 
 : ''
);

这里:

  1. JS检查是否为n > 0。如果是,则:
    1. 创建数组['th', 'st', 'nd', 'rd']
    2. 下一个[]告诉我们一个property accessor将紧随其后
    3. 哪个属性由三元运算确定。 0(将表示(th)或n & 10的结果
    4. 无论使用什么n,都会添加访问该属性的结果。
  2. 如果n小于等于0,则无论n是多少,都会向其中添加一个空字符串。

了解operator precedence in JS很有帮助。认真阅读并练习一些。

答案 2 :(得分:0)

运算符(一元,二进制,三元)

三元条件运算符与大多数其他运算符的不同之处在于,它需要3个操作数,而不是一两个。

您习惯于一元运算符,例如-5中的负号,它采用一个操作数并将其设为负值。

还有 binary 串联运算符+'hello ' + 'world'一样使用。这里有两个产生值'hello world'的操作数。

三元条件运算符的格式为

/* conditional expression */ ? /* expression if truthy */ : /* expression if not truthy*/

其中的注释是操作数,供您填写示例中更复杂的代码。 // if n > 0 then the complex expression, otherwise the empty string

简单的例子。

尝试在浏览器中运行以下语句。

console.log(true ? 'true value' : 'false value');

var x = 3 > 1 ? 'true value' : 'false value';
console.log(x);

prompt('try entering a blank space, or characters') ? 'a' : 'b';

代码流与其他答案所描述的大致相同。如果条件为真,则发出第一​​个表达式,否则发出第二个表达式。

Here are some docs on what I mean by truthy