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中有特定的名称吗?有人能告诉我这是什么叫,所以我可以学习如何使用它们,试图找出这段代码是如何工作的。
感谢
答案 0 :(得分:3)
这只是一系列Logical OR operators。但是,由于这些运算符是short-circuited并且不强制布尔强制,它们可以用于“默认值”或“替代”,因为它们将返回第一个 truthy 值(其他任何值)而不是undefined
,null
,NaN
,0
,""
或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]