Intl.supportedValuesOf()

Baseline 已广泛支持

此特性已经十分成熟,可在许多设备和浏览器版本上使用。自 2022 年 3 月起,它已在各浏览器中可用。

Intl.supportedValuesOf() 静态方法返回一个数组,其中包含实现支持的日历、排序规则、货币、数字系统或单位值。

重复项将被省略,并且数组会以升序词典顺序(或更准确地说,使用带有 undefined 比较函数的 Array.prototype.sort())进行排序。

该方法可用于功能测试特定实现是否支持某些值,并且仅在必要时下载 polyfill。它还可以用于构建允许用户选择其首选本地化值的 UI,例如当 UI 是从 WebGL 或服务器端创建时。

此方法不感知区域设置:某些标识符可能只在特定区域设置中受支持或首选。如果你想确定特定区域设置的首选值,应使用 Intl.Locale 对象,例如 Intl.Locale.prototype.getCalendars()

试一试

console.log(Intl.supportedValuesOf("calendar"));
console.log(Intl.supportedValuesOf("collation"));
console.log(Intl.supportedValuesOf("currency"));
console.log(Intl.supportedValuesOf("numberingSystem"));
console.log(Intl.supportedValuesOf("timeZone"));
console.log(Intl.supportedValuesOf("unit"));
// Expected output: Array ['key'] (for each key)

try {
  Intl.supportedValuesOf("someInvalidKey");
} catch (err) {
  console.log(err.toString());
  // Expected output: RangeError: invalid key: "someInvalidKey"
}

语法

js
Intl.supportedValuesOf(key)

参数

key

一个键字符串,指示要返回的值的类别。以下是其中之一:

返回值

一个排序后的唯一字符串值数组,表示实现对给定键的支持值。可能返回的值如下所示。

支持的日历类型

以下是浏览器通常支持的 calendar 键的所有值。这些值可用于 calendar 选项或 Unicode 扩展键 ca,用于创建 Intl.DateTimeFormat 等对象,以及创建 Temporal 日期对象。

描述
buddhist 泰国佛教日历
chinese 中国传统农历
coptic 科普特日历
dangi 韩国传统日历
ethioaa 埃塞俄比亚日历,Amete Alem,单纪元变体(纪元约公元前 5493 年)
ethiopic 埃塞俄比亚日历,Amete Mihret,双纪元变体(纪元约公元 8 年,Amete Alem 用于 Amete Mihret 之前的年份)
gregory 公历(推算,儒略混合历)
hebrew 希伯来传统日历
indian 印度日历
islamic 回历,未指定算法。注意:截至 2025 年 4 月,这是一个天文模拟,其参数未文档化,并且已知与非软件环境中的特定回历变体不匹配。为了获得明确指定的结果,请使用以下三个特定变体之一:islamic-umalquraislamic-tblaislamic-civil
islamic-umalqura 回历,Umm al-Qura(使用 KACST 计算的月份,从回历 1300 年(ISO 1882 年 11 月 12 日)开始到回历 1600 年(ISO 2174 年 11 月 25 日)结束,在此范围之外回退到 islamic-civil
islamic-tbla 回历,表格/基于规则,闰年规则 II(30 年周期中闰年为 2、5、7、10、13、16、18、21、24、26、29 (基于 1 的编号)),以及星期四/天文纪元(儒略历 622 年 7 月 15 日 / ISO 0622 年 7 月 18 日)
islamic-civil 回历,表格/基于规则,闰年规则 II(30 年周期中闰年为 2、5、7、10、13、16、18、21、24、26、29 (基于 1 的编号)),以及星期五/民用纪元(儒略历 622 年 7 月 16 日 / ISO 0622 年 7 月 19 日)
iso8601 ISO 日历(公历的一种变体,其周规则和格式参数独立于地区)
japanese 日本皇历(此日历为每位新天皇增加一个纪元,因此未来日期的输出年份和纪元可能与你的代码在未来引擎版本上运行时输入的年份和纪元不匹配。注意:请参阅下表关于 1868 年 10 月 23 日 ISO 之前的日期的备注。)
persian 波斯日历
roc 中华民国日历

截至 2025 年 10 月,在 japanese 日历中,1868 年 10 月 23 日 ISO(明治元年 10 月 23 日)之前的日期在浏览器中无法按预期工作,主要有两个方面。首先,CLDR 对明治时代的开始日期有误,导致日历实现将明治时代向过去延伸超出实际时间。其次,即将推出的 Intl 纪元和月份代码提案规定,明治时代之前的日期应使用公历纪元,但浏览器传统上使用近似的先前日本纪元。japanese 日历于明治 6 年 1 月 1 日 / ISO 1873 年 1 月 1 日开始使用,因此这些问题仅影响推算日期。

以下类型在 CLDR 中指定,但在浏览器中没有与上述日历不同的实现。

描述 注意
islamicc 已弃用 民用(算法)阿拉伯日历。 这是 islamic-civil 的别名,因此不会被 supportedValuesOf() 返回。请改用 islamic-civil
islamic-rgsa 回历,沙特阿拉伯观测 浏览器没有历史观测数据,未来的观测也尚未发生。截至 2025 年 4 月,此日历与 islamic 具有相同的行为。对于基于麦加的天文计算,请使用 islamic-umalqura

参考

支持的排序规则类型

以下是浏览器通常支持的 collation 键的所有值。这些值可用于 collation 选项或 Unicode 扩展键 co,用于创建 Intl.Collator 等对象。

描述
compat 用于兼容性的先前排序版本(适用于阿拉伯语)
dict 字典式排序(例如僧伽罗语)。也识别为 dictionary
emoji 表情符号字符的推荐排序
eor 欧洲排序规则
phonebk 电话簿式排序(例如德语)。也识别为 phonebook
phonetic 语音排序(基于发音排序;适用于林加拉语)
pinyin 拉丁文和中文/日文/韩文(CJK)字符的拼音排序(用于中文)
searchjl 韩语声母搜索的特殊排序类型。警告:此排序不用于排序,尽管你只能将其与 usage: "sort"Intl.Collator 一起使用。
stroke 拉丁文的拼音排序,CJK 字符的笔画排序(用于中文)
trad 传统式排序(例如西班牙语)。也识别为 traditional
unihan 拉丁文的拼音排序,CJK 字符的 Unihan 部首-笔画排序(用于中文)
zhuyin 拉丁文的拼音排序,注音符号和 CJK 字符的注音排序(用于中文)

以下类型在 CLDR 数据中指定,但已弃用,不鼓励显式使用,并且/或者浏览器可能由于各种原因不支持它们。请避免使用它们

描述 注意
big5han 已弃用 拉丁文的拼音排序,CJK 字符的 big5 字符集排序(用于中文) 已弃用。
direct 已弃用 二进制码点顺序(用于印地语) 已弃用。
ducet 默认的 Unicode 排序元素表顺序 ducet 排序类型不适用于 Web。
gb2312 已弃用 拉丁文的拼音排序,CJK 字符的 gb2312han 字符集排序(适用于中文)。也识别为 gb2312han 已弃用。
reformed 已弃用 改革式排序(例如瑞典语) 已弃用。这是瑞典语默认排序的旧名称,其排序命名曾与其他语言不同。由于这是默认值,请请求 sv 而不是请求 sv-u-co-reformed
search 用于字符串搜索的特殊排序类型 不要用作排序类型,因为在 Intl.Collator 中,此排序通过 usage: "search" 选项激活。目前没有用于子字符串搜索的 API,因此目前仅适用于通过尝试将键与每个列表项进行完整字符串匹配来过滤字符串列表。
standard 除中文(以及以前的瑞典语)外,每种语言的默认排序 请勿显式使用。通常,没有必要显式指定此项,并且由于瑞典语在过去具有不同的含义,因此为瑞典语指定此项会产生问题。

参考

支持的货币标识符

货币标识符是 ISO 4217 中定义的三字母大写代码。这些值可用于创建 Intl.NumberFormat 等对象时的 currency 选项,以及 Intl.DisplayNames.prototype.of()。常用标识符有 300 多个,因此我们不会在此列出。有关所有可能标识符的详尽列表,请参阅 维基百科文章

参考

支持的数字系统类型

以下是浏览器通常支持的 numberingSystem 键的所有值。这些值可用于创建 Intl.NumberFormat 等对象时的 numberingSystem 选项或 Unicode 扩展键 nu。对于带有“数字字符”的行,运行时会逐个翻译数字而无需额外操作。其他标记为“算法”的则需要额外的算法来翻译数字。Unicode 码点越高,数字系统越新,所有浏览器支持的可能性就越低。

描述 数字字符
adlm 阿德拉姆数字 𞥐𞥑𞥒𞥓𞥔𞥕𞥖𞥗𞥘𞥙 (U+1E950 到 U+1E959)
ahom 阿洪数字 𑜰𑜱𑜲𑜳𑜴𑜵𑜶𑜷𑜸𑜹 (U+11730 到 U+11739)
arab 阿拉伯-印度数字 ٠١٢٣٤٥٦٧٨٩ (U+0660 到 U+0669)
arabext 扩展阿拉伯-印度数字 ۰۰۱۲۳۴56789 (U+06F0 到 U+06F9)
armn 亚美尼亚大写数字 algorithmic
armnlow 亚美尼亚小写数字 algorithmic
bali 巴厘数字 ᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙ (U+1B50 到 U+1B59)
beng 孟加拉数字 ০১২৩৪৫৬৭৮৯ (U+09E6 到 U+09EF)
bhks 巴海克苏基数字 𑱐𑱑𑱒𑱓𑱔𑱕𑱖𑱗𑱘𑱙 (U+11C50 到 U+11C59)
brah 婆罗米数字 𑁦𑁧𑁨𑁩𑁪𑁫𑁬𑁭𑁮𑁯 (U+11066 到 U+1106F)
cakm 恰克玛数字 𑄶𑄷𑄸𑄹𑄺𑄻𑄼𑄽𑄾𑄿 (U+11136 到 U+1113F)
cham 占婆数字 ꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙ (U+AA50 到 U+AA59)
cyrl 西里尔数字 algorithmic
deva 天城文数字 ०१२३४५६७८९ (U+0966 到 U+096F)
diak 迪维斯阿库鲁数字 𑥐𑥑𑥒𑥓𑥔𑥕𑥖𑥗𑥘𑥙 (U+11950 到 U+11959)
ethi 埃塞俄比亚数字 algorithmic
fullwide 全角数字 0123456789 (U+FF10 到 U+FF19)
gara 加莱数字 𐵀𐵁𐵂𐵃𐵄𐵅𐵆𐵇𐵈𐵉 (U+10D40 到 U+10D49)
geor 格鲁吉亚数字 algorithmic
gong 贡加拉贡迪数字 𑶠𑶡𑶢𑶣𑶤𑶥𑶦𑶧𑶨𑶩 (U+11DA0 到 U+11DA9)
gonm 马萨拉姆贡迪数字 𑵐𑵑𑵒𑵓𑵔𑵕𑵖𑵗𑵘𑵙 (U+11D50 到 U+11D59)
grek 希腊大写数字 algorithmic
greklow 希腊小写数字 algorithmic
gujr 古吉拉特数字 ૦૧૨૩૪૫૬૭૮૯ (U+0AE6 到 U+0AEF)
gukh 古隆克马数字 𖄰𖄱𖄲𖄳𖄴𖄵𖄶𖄷𖄸𖄹 (U+16130 到 U+16139)
guru 古尔穆基数字 ੦੧੨੩੪੫੬੭੮੯ (U+0A66 到 U+0A6F)
hanidays 用于农历/其他传统日历的汉字月份编号
hanidec 使用汉字数字作为位数的十进制位置系统 〇一二三四五六七八九 (U+3007, U+4E00, U+4E8C, U+4E09, U+56DB, U+4E94, U+516D, U+4E03, U+516B, U+4E5D)
hans 简体中文数字 algorithmic
hansfin 简体中文财务数字 algorithmic
hant 繁体中文数字 algorithmic
hantfin 繁体中文财务数字 algorithmic
hebr 希伯来数字 algorithmic
hmng 帕哈瓦苗数字 𖭐𖭑𖭒𖭓𖭔𖭕𖭖𖭗𖭘𖭙 (U+16B50 到 U+16B59)
hmnp 尼亚肯普阿楚苗数字 𞅀𞅁𞅂𞅃𞅄𞅅𞅆𞅇𞅈𞅉 (U+1E140 到 U+1E149)
java 爪哇数字 ꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙ (U+A9D0 到 U+A9D9)
jpan 日语数字 algorithmic
jpanfin 日语财务数字 algorithmic
jpanyear 日语日历的日语元年数字 algorithmic
kali 卡亚里数字 ꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ (U+A900 到 U+A909)
kawi 卡维数字 𑽐𑽑𑽒𑽓𑽔𑽕𑽖𑽗𑽘𑽙 (U+11F50 到 U+11F59)
khmr 高棉数字 ០១២៣៤៥៦៧៨៩ (U+17E0 到 U+17E9)
knda 卡纳达数字 ೦೧೨೩೪೫೬೭೮೯ (U+0CE6 到 U+0CEF)
krai 基拉特莱数字 𖵰𖵱𖵲𖵳𖵴𖵵𖵶𖵷𖵸𖵹 (U+16D70 到 U+16D79)
lana 泰坦霍拉(世俗)数字 ᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉ (U+1A80 到 U+1A89)
lanatham 泰坦(教会)数字 ᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙ (U+1A90 到 U+1A99)
laoo 老挝数字 ໐໑໒໓໔໕໖໗໘໙ (U+0ED0 到 U+0ED9)
latn 拉丁数字 0123456789 (U+0030 到 U+0039)
lepc 雷普恰数字 ᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉ (U+1C40 到 U+1C49)
limb 林布数字 ᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ (U+1946 到 U+194F)
mathbold 数学粗体数字 𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗 (U+1D7CE 到 U+1D7D7)
mathdbl 数学双线数字 𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡 (U+1D7D8 到 U+1D7E1)
mathmono 数学等宽数字 𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿 (U+1D7F6 到 U+1D7FF)
mathsanb 数学无衬线粗体数字 𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵 (U+1D7EC 到 U+1D7F5)
mathsans 数学无衬线数字 𝟢𝟣𝟤𝟥𝟦𝟧𝟨𝟩𝟪𝟫 (U+1D7E2 到 U+1D7EB)
mlym 马拉雅拉姆数字 ൦൧൨൩൪൫൬൭൮൯ (U+0D66 到 U+0D6F)
modi 莫迪数字 𑙐𑙑𑙒𑙓𑙔𑙕𑙖𑙗𑙘𑙙 (U+11650 到 U+11659)
mong 蒙古数字 ᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ (U+1810 到 U+1819)
mroo 穆罗数字 𖩠𖩡𖩢𖩣𖩤𖩥𖩦𖩧𖩨𖩩 (U+16A60 到 U+16A69)
mtei 梅泰文数字 ꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹ (U+ABF0 到 U+ABF9)
mymr 缅甸数字 ၀၁၂၃၄၅၆၇89 (U+1040 到 U+1049)
mymrepka 缅甸东部波卡伦数字 𑛚𑛛𑛜𑛝𑛞𑛟𑛠𑛡𑛢𑛣 (U+116DA 到 U+116E3)
mymrpao 缅甸帕欧数字 𑛐𑛑𑛒𑛓𑛔𑛕𑛖𑛗𑛘𑛙 (U+116D0 到 U+116D9)
mymrshan 缅甸掸族数字 ႐႑႒႓႔႕႖႗႘႙ (U+1090 到 U+1099)
mymrtlng 缅甸泰莱数字 ꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹ (U+A9F0 到 U+A9F9)
nagm 纳格蒙达里数字 𞓰𞓱𞓲𞓳𞓴𞓵𞓶𞓷𞓸𞓹 (U+1E4F0 到 U+1E4F9)
newa 尼瓦数字 𑑐𑑑𑑒𑑓𑑔𑑕𑑖𑑗𑑘𑑙 (U+11450 到 U+11459)
nkoo 恩科数字 ߀߁߂߃߄߅߆߇߈߉ (U+07C0 到 U+07C9)
olck 奥尔奇基数字 ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ (U+1C50 到 U+1C59)
onao 奥瑙数字 𞗱𞗲𞗳𞗴𞗵𞗶𞗷𞗸𞗹𞗺 (U+1E5F1 到 U+1E5FA)
orya 奥里亚数字 ୦୧୨୩୪୫୬୭୮୯ (U+0B66 到 U+0B6F)
osma 奥斯曼尼亚数字 𐒠𐒡𐒢𐒣𐒤𐒥𐒦𐒧𐒨𐒩 (U+104A0 到 U+104A9)
outlined 旧式计算轮廓数字 𜳰𜳱𜳲𜳳𜳴𜳵𜳶𜳷𜳸𜳹 (U+1CCF0 到 U+1CCF9)
rohg 哈尼菲罗兴亚数字 𐴰𐴱𐴲𐴳𐴴𐴵𐴶𐴷𐴸𐴹 (U+10D30 到 U+10D39)
roman 罗马大写数字 algorithmic
romanlow 罗马小写数字 algorithmic
saur 索拉什特拉数字 ꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙ (U+A8D0 到 U+A8D9)
segment 旧式计算分段数字 🯰🯱🯲🯳🯴🯵🯶🯷🯸🯹 (U+1FBF0 到 U+1FBF9)
shrd 夏拉达数字 𑇐𑇑𑇒𑇓𑇔𑇕𑇖𑇗𑇘𑇙 (U+111D0 到 U+111D9)
sind 胡达瓦迪数字 𑋰𑋱𑋲𑋳𑋴𑋵𑋶𑋷𑋸𑋹 (U+112F0 到 U+112F9)
sinh 僧伽罗里特数字 ෦෧෨෩෪෫෬෭෮෯ (U+0DE6 到 U+0DEF)
sora 索拉_松本数字 𑃰𑃱𑃲𑃳𑃴𑃵𑃶𑃷𑃸𑃹 (U+110F0 到 U+110F9)
sund 巽他数字 ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ (U+1BB0 到 U+1BB9)
sunu 苏努瓦尔数字 𑯰𑯱𑯲𑯳𑯴𑯵𑯶𑯷𑯸𑯹 (U+11BF0 到 U+11BF9)
takr 塔克里数字 𑛀𑛁𑛂𑛃𑛄𑛅𑛆𑛇𑛈𑛉 (U+116C0 到 U+116C9)
talu 新傣仂数字 ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙ (U+19D0 到 U+19D9)
taml 泰米尔数字 algorithmic
tamldec 现代泰米尔十进制数字 ௦௧௨௩௪௫௬௭௮௯ (U+0BE6 到 U+0BEF)
telu 泰卢固数字 ౦౧౨౩౪౫౬౭౮౯ (U+0C66 到 U+0C6F)
thai 泰国数字 ๐๑๒๓๔๕๖๗๘9 (U+0E50 到 U+0E59)
tibt 藏文数字 ༠༡༢༣༤༥༦༧༨༩ (U+0F20 到 U+0F29)
tirh 蒂尔胡塔数字 𑓐𑓑𑓒𑓓𑓔𑓕𑓖𑓗𑓘𑓙 (U+114D0 到 U+114D9)
tnsa 唐萨数字 𖫀𖫁𖫂𖫃𖫄𖫅𖫆𖫇𖫈𖫉 (U+16AC0 到 U+16AC9)
vaii 瓦伊数字 ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ (U+A620 到 U+A629)
wara 瓦朗西提数字 𑣠𑣡𑣢𑣣𑣤𑣥𑣦𑣧𑣨𑣩 (U+118E0 到 U+118E9)
wcho 万乔数字 𞋰𞋱𞋲𞋳𞋴𞋵𞋶𞋷𞋸𞋹 (U+1E2F0 到 U+1E2F9)

有三个特殊值:nativetraditiofinance,它们的含义取决于区域设置,并将根据区域设置解析为正确的系统。因此,resolvedOptions() 方法永远不会返回这些值,但 Intl.Locale.prototype.numberingSystem 会返回(如果作为输入提供)。

参考

支持的时区标识符

支持的时区标识符可用于创建 Intl.DateTimeFormat 等对象时的 timeZone 选项,以及创建 Temporal 日期对象。常用标识符有 400 多个,因此我们不会在此列出。有关所有可能标识符的详尽列表,请参阅 维基百科文章IANA 时区数据库

浏览列表时,请注意 Temporal 的标准化要求浏览器始终返回 IANA 数据库中的主要标识符,该标识符可能会随时间变化。有关更多信息,请参阅时区和偏移量。例如,返回的数组应包含 "Asia/Kolkata" 而不是 "Asia/Calcutta",因为后者是前者的别名,并且它们都对应印度;但是,它应该包含 "Africa/Abidjan""Atlantic/Reykjavik",因为它们在不同的国家,尽管后者也是前者的别名。

参考

支持的单位标识符

以下是浏览器通常支持的 unit 键的所有值。这些值可用于创建 Intl.NumberFormat 等对象时的 unit 选项。此列表是 ECMA-402 规范明确批准的 CLDR 子集,因此所有实现都应保持一致。

  • acre
  • bit
  • byte
  • celsius
  • centimeter
  • degree
  • fahrenheit
  • fluid-ounce
  • foot
  • gallon
  • gigabit
  • gigabyte
  • gram
  • hectare
  • 小时
  • inch
  • kilobit
  • kilobyte
  • kilogram
  • kilometer
  • liter
  • megabit
  • megabyte
  • meter
  • microsecond
  • mile
  • mile-scandinavian
  • milliliter
  • millimeter
  • millisecond
  • minute
  • 月份
  • nanosecond
  • ounce
  • percent
  • petabyte
  • pound
  • stone
  • terabit
  • terabyte
  • yard

指定单位时,你还可以使用“-per-”分隔符组合两个单位。例如,meter-per-secondliter-per-megabyte

参考

异常

RangeError

如果传递了不支持的键作为参数,则抛出。

示例

功能测试

你可以通过与 undefined 比较来检查该方法是否受支持

js
if (typeof Intl.supportedValuesOf !== "undefined") {
  // method is supported
}

获取键的所有值

要获取日历支持的值,你可以使用键 "calendar" 调用该方法。然后,你可以遍历返回的数组,如下所示:

js
Intl.supportedValuesOf("calendar").forEach((calendar) => {
  // "buddhist", "chinese", "coptic", "dangi", etc.
});

其他所有值都以相同的方式获取。

js
Intl.supportedValuesOf("collation").forEach((collation) => {
  // "compat", "dict", "emoji", etc.
});

Intl.supportedValuesOf("currency").forEach((currency) => {
  // "ADP", "AED", "AFA", "AFN", "ALK", "ALL", "AMD", etc.
});

Intl.supportedValuesOf("numberingSystem").forEach((numberingSystem) => {
  // "adlm", "ahom", "arab", "arabext", "bali", etc.
});

Intl.supportedValuesOf("timeZone").forEach((timeZone) => {
  // "Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", etc.
});

Intl.supportedValuesOf("unit").forEach((unit) => {
  // "acre", "bit", "byte", "celsius", "centimeter", etc.
});

无效键抛出 RangeError

js
try {
  Intl.supportedValuesOf("someInvalidKey");
} catch (err) {
  // RangeError: invalid key: "someInvalidKey"
}

规范

规范
ECMAScript® 2026 国际化 API 规范
# sec-intl.supportedvaluesof

浏览器兼容性

另见