簡體   English   中英

(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)然而我在這里得到一個奇怪的結果,我不太確定我做錯了什么,任何幫助都會不勝感激。

我確實嘗試谷歌並想出這個,承諾,只是會欣賞一個相對詳細的解釋,為什么它的行為奇怪。

你輸入了一些在語法上正確的代碼,但它並不意味着你所希望它的含義。

這個:

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

實際上完全一樣

(days == 21 ? days + 'st':'')

(1, 31, 21) 1,31,21 (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";

然后,您可以按天數索引數組以獲取后綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM