(Javascript)为三元运算符问题设置的多个条件

时间:2015-07-23 14:38:09

标签: javascript conditional ternary-operator

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)但是我在这里得到了一个奇怪的结果,我不太确定我做错了什么,任何将不胜感激。

我确实尝试谷歌并想出这一点,承诺,只是会欣赏一个相对详细的解释,为什么它表现得很奇怪。

1 个答案:

答案 0 :(得分:3)

您输入了一些语法正确的代码,但它并不代表您希望它的意思。

此:

(days == (1, 31, 21) ? days + 'st':'')

实际上与

完全相同
(days == 21 ? days + 'st':'')

(1, 31, 21)子表达式涉及逗号运算符,它允许计算一系列表达式(可能带有副作用)。总值是最后一个表达式的值。

如果您想将值与可能性列表进行比较,通常可以

  • 使用由==连接的===(或||)比较序列;
  • switch条款组使用case语句;
  • 使用.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";

然后您可以按日期编号索引数组以获取后缀。