使用?:(javascript中的条件运算符)的函数说明

使用?:(javascript中的条件运算符)的函数说明,javascript,ternary-operator,Javascript,Ternary Operator,我试图理解这个函数,当我们给它一个数字时,它返回序数 不幸的是,我无法理解这是如何与条件运算符一起工作的,有人能给我解释一下吗 function getOrdinalNum(n) { return n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : ''); } 函数getOrdinalNum(n){ 返回n+(n>0?['th',

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

不幸的是,我无法理解这是如何与条件运算符一起工作的,有人能给我解释一下吗

function getOrdinalNum(n) {
  return n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');
}
函数getOrdinalNum(n){ 返回n+(n>0?['th','st','nd','rd'][(n>3&&n<21)| n%10>3?0:n%10]:''; }
将其分解如下:

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

  • JS检查
    n>0
    。如果是,则:
  • 创建了一个数组
    ['th','st','nd','rd']
  • 下一个
    []
    告诉我们将有一个
  • 哪个属性由三元运算决定。
    0
    (表示(
    th
    )或
    n&10的结果
  • 访问该属性的结果被添加到
    n
  • 如果
    n
    小于或等于
    0
    ,则无论
    n
    是什么,都会向其添加一个空字符串

  • 这有助于了解答案。好好阅读并练习一下。

    将其分解如下:

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

  • JS检查是否
    n>0
    。如果是,则:
  • 创建了一个数组
    ['th','st','nd','rd']
  • 下一个
    []
    告诉我们将有一个
  • 哪个属性由三元运算确定。
    0
    (表示(
    th
    )或
    n&10
  • 访问该属性的结果被添加到
    n
  • 如果
    n
    小于或等于
    0
    ,则无论
    n
    是什么,都会向其添加一个空字符串

  • 它有助于了解函数。请仔细阅读并进行一些练习。

    解释这类事情的最佳方法是使用
    if
    语句将其分解为一个函数。看看
    newFunction
    它与函数
    getOrdinalNum
    的功能相同:

    函数getOrdinalNum(n){ 返回n+(n>0?['th','st','nd','rd'][(n>3&&n<21)| n%10>3?0:n%10]:''; } 函数newFunction(n){ 如果(n>0){ 如果((n>3&&n<21)|n%10>3){ 返回n+'th';//本质上返回['th',st',nd',rd'][0]; }否则{ 返回n+['th','st','nd','rd'][n%10]; } } } for(设i=1;i<9;i++){ console.log(getOrdinalNum(i)); console.log(newFunction(i));
    }
    解释这类事情的最佳方法是使用
    if
    语句将其分解为一个函数。看看
    newFunction
    它与函数
    getOrdinalNum
    的功能相同:

    函数getOrdinalNum(n){ 返回n+(n>0?['th','st','nd','rd'][(n>3&&n<21)| n%10>3?0:n%10]:''; } 函数newFunction(n){ 如果(n>0){ 如果((n>3&&n<21)|n%10>3){ 返回n+'th';//本质上返回['th',st',nd',rd'][0]; }否则{ 返回n+['th','st','nd','rd'][n%10]; } } } for(设i=1;i<9;i++){ console.log(getOrdinalNum(i)); console.log(newFunction(i)); }运算符(一元、二元、三元) 三值条件运算符不同于大多数其他运算符,因为它需要3个操作数,而不是一个或两个操作数

    您习惯于使用一元运算符,如
    -5
    中的负号,它接受一个操作数并使其成为负值

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

    三元条件运算符的形式为

    /* conditional expression */ ? /* expression if truthy */ : /* expression if not truthy*/
    
    其中,注释是操作数,您可以用示例中更复杂的代码填充。
    //如果n>0,则为复杂表达式,否则为空字符串

    简单的例子。 尝试在浏览器中运行以下语句

    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';
    
    代码流程与其他答案描述的基本相同。如果条件为真,则发出第一个表达式,否则发出第二个表达式

    运算符(一元、二元、三元) 三值条件运算符不同于大多数其他运算符,因为它需要3个操作数,而不是一个或两个操作数

    您习惯于使用一元运算符,如
    -5
    中的负号,它接受一个操作数并使其成为负值

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

    三元条件运算符的形式为

    /* conditional expression */ ? /* expression if truthy */ : /* expression if not truthy*/
    
    其中,注释是操作数,您可以用示例中更复杂的代码填充。
    //如果n>0,则为复杂表达式,否则为空字符串

    简单的例子。 尝试在浏览器中运行以下语句

    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';
    
    代码流程与其他答案描述的基本相同。如果条件为真,则发出第一个表达式,否则发出第二个表达式


    可能的重复也是一个好主意。但是,为了更容易理解,我建议分解这些操作(
    返回n+['th','st','nd','rd'][n%10];
    )在不同的变量中,例如:
    索引选择
    选择
    最终结果
    ,这也是一个好主意。但是,为了更容易理解,我建议分解这些操作(
    返回n+['th','st','nd','rd'][n%