在Javascript中调用的这种评估是什么?

时间:2012-02-20 00:04:37

标签: javascript

function ord(n) {
  var sfx = ["th","st","nd","rd"];
  var val = n%100;
  return n + (sfx[(val-20)%10] || sfx[val] || sfx[0]);
}

最后的部分,(sfx [(val-20)%10] || sfx [val] || sfx [0]);这种评估在javascript中有特定的名称吗?有人能告诉我这是什么叫,所以我可以学习如何使用它们,试图找出这段代码是如何工作的。

感谢

5 个答案:

答案 0 :(得分:3)

这只是一系列Logical OR operators。但是,由于这些运算符是short-circuited并且不强制布尔强制,它们可以用于“默认值”或“替代”,因为它们将返回第一个 truthy 值(其他任何值)而不是undefinednullNaN0""false):

console.log(1 || 2 || 3); // 1
console.log(0 || 2 || 3); // 2
console.log(0 || 0 || 3); // 3

或最后一个 falsy 值,如果没有 truthy

console.log(false || 0 || null); // null

return n + (sfx[(val-20)%10] || sfx[val] || sfx[0]);行可以延伸到:

if (sfx[(val-20)%10]) {
    return n + sfx[(val-20)%10];
} else if (sfx[val]) {
    return n + sfx[val];
} else {
    return n + sfx[0];
}

答案 1 :(得分:1)

如果您指的是||的使用,则称为短路评估。

答案 2 :(得分:1)

那里发生了两件事。

正在计算内联数组索引。如果你不熟悉%,它就是数学模运算符:即它说"从val中减去20并在除以10"时取余数,或减去10并且只取十进制的最后一位数。

x || y || z结构是关于获取第一个非虚假值:javascript中的||运算符具有返回第一个非虚假值的奇数属性,不一定是实际值true。即:

3 || 5返回3

0 || 5返回5

false || 5返回5

所以代码正在做的是,"取这三个计算中的第一个非虚假数字",假设前两个可以访问声明的数组项之外的值(并返回& #34; undefined")实际意味着,"尝试前两个计算。如果他们失败了,则默认返回' "

答案 3 :(得分:0)

它使用从左到右的评估来分配您想要的值,

如果第一个术语的评估结果为未定义,则会使第二个术语评估为第二个,依此类推。

因此在示例中,它用于通过外观获取日期的正确后缀。

使用它而不是嵌套很多if。

答案 4 :(得分:0)

这是获取第一个有效语句的方法。
如果该陈述无效,它将从左到右移动到下一个。第0个数组元素是有效的,因为它被定义,所以你知道你总是有某种有效的输出,如果没有其他原因,那就是为什么最后一个语句必须在那里sfx[0]