(Javascript) 三元运算符问题的多个条件集
(Javascript) multiple condition set for ternary operator issue
for (var days = 1; days <= 31; ++days) {
console.log(
(days == (1, 31, 21) ? days + 'st':'') ||
(days == (2, 22) ? days + 'nd':'') ||
(days == (3, 23) ? days + 'rd':'') ||
days + 'th'
);
}
试图显示 (1st, 2nd, 3rd)
(21st, 22nd, 23rd)
(31st)
(multiple th)
但是我在这里得到一个奇怪的结果,我不太确定我做错了什么,我们将不胜感激。
我确实尝试 google 并解决了这个问题,我保证,我希望能得到一个相对详细的解释来解释为什么它的行为很奇怪。
您输入的一些代码在语法上是正确的,但它的意思与您显然期望的意思完全不同。
这个:
(days == (1, 31, 21) ? days + 'st':'')
实际上与
完全相同
(days == 21 ? days + 'st':'')
(1, 31, 21)
子表达式涉及逗号运算符,它允许计算一系列表达式(可能有副作用)。总值是最后一个表达式的值。
如果您想将一个值与一系列可能性进行比较,通常您可以
- 使用由
||
连接的一系列 ==
(或 ===
)比较;
- 使用包含
case
个子句组的 switch
语句;
- 使用
.indexOf()
在数组中查找值。
在这种特殊情况下,我可能会创建一个包含后缀的数组,然后对其进行索引:
var suffixes = Array.apply(null, new Array(32)).map(function() { return "th"; });
suffixes[2] = suffixes[22] = "nd";
suffixes[1] = suffixes[21] = suffixes[31] = "st";
suffixes[3] = suffixes[23] = "rd";
然后您可以按天数索引到数组中以获得后缀。
for (var days = 1; days <= 31; ++days) {
console.log(
(days == (1, 31, 21) ? days + 'st':'') ||
(days == (2, 22) ? days + 'nd':'') ||
(days == (3, 23) ? days + 'rd':'') ||
days + 'th'
);
}
试图显示 (1st, 2nd, 3rd)
(21st, 22nd, 23rd)
(31st)
(multiple th)
但是我在这里得到一个奇怪的结果,我不太确定我做错了什么,我们将不胜感激。
我确实尝试 google 并解决了这个问题,我保证,我希望能得到一个相对详细的解释来解释为什么它的行为很奇怪。
您输入的一些代码在语法上是正确的,但它的意思与您显然期望的意思完全不同。
这个:
(days == (1, 31, 21) ? days + 'st':'')
实际上与
完全相同(days == 21 ? days + 'st':'')
(1, 31, 21)
子表达式涉及逗号运算符,它允许计算一系列表达式(可能有副作用)。总值是最后一个表达式的值。
如果您想将一个值与一系列可能性进行比较,通常您可以
- 使用由
||
连接的一系列==
(或===
)比较; - 使用包含
case
个子句组的switch
语句; - 使用
.indexOf()
在数组中查找值。
在这种特殊情况下,我可能会创建一个包含后缀的数组,然后对其进行索引:
var suffixes = Array.apply(null, new Array(32)).map(function() { return "th"; });
suffixes[2] = suffixes[22] = "nd";
suffixes[1] = suffixes[21] = suffixes[31] = "st";
suffixes[3] = suffixes[23] = "rd";
然后您可以按天数索引到数组中以获得后缀。