v9.9
发布信息
发布时间:2022.01.31
Chrome 同步版本:Chrome 99
链接:V8 release v9.9
JavaScript 新特性
1. Intl.Locale 新增属性
还记得在 v9.5 版本中,新增了 Intl.DisplayNames 的支持类型吗?v9.9 又双叒来扩展 Intl 的 API 啦!
这次扩展的是在 v7.4 引入的[Intl.Locale](https://v8.dev/blog/v8-release-74#intl.locale)
API。
[Intl.Locale](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale)
对象是为了更便捷地处理 Unicode 区域设置。Unicode 使用字符串作为区域识别标识。区域标识符由语言标识符和扩展标记组成。语言标识符是区域(locale)的核心,包含了语言、脚本和地域子标记(region subtags)。有关区域设置的其他信息体现在可选的扩展标记中。扩展标记保存有关区域设置方面的信息,例如日历类型、时钟类型和编号系统类型。
此次为Intl.Locale
对象加入了七个属性:calendars
, collations
, hourCycles
, numberingSystems
, timeZones
, textInfo
, weekInf
。
其中,访问 calendars
, collations
, hourCycles
, numberingSystems
, timeZones
这五个属性会返回一个数组,包含该区域标识支持的日历类型、词语定序类型、时钟类型、编号系统类型、时区类型。
const arabicEgyptLocale = new Intl.Locale('ar-EG')
// ar-EG
arabicEgyptLocale.calendars
// ['gregory', 'coptic', 'islamic', 'islamic-civil', 'islamic-tbla']
arabicEgyptLocale.collations
// ['compat', 'emoji', 'eor']
arabicEgyptLocale.hourCycles
// ['h12']
arabicEgyptLocale.numberingSystems
// ['arab']
arabicEgyptLocale.timeZones
// ['Africa/Cairo']
textInfo
属性会返回包含区域文字相关信息的对象,目前文字信息只有一个属性 direction
, 即表示文字的排版方向,ltr
是从左到右,rtl
是从右到左。
arabicEgyptLocale.textInfo
// { direction: 'rtl' }
japaneseLocale.textInfo
// { direction: 'ltr' }
chineseTaiwanLocale.textInfo
// { direction: 'ltr' }
weekInfo
属性会返回当地区域星期相关信息的对象,目前有属性 firstDay
表示一周的开始是周几,1-7 表示周一到周日;weekend
属性返回一个数组,表示周末是哪几天;minimalDays
属性表示每月/每年的第一个星期最少要求的天数。
以下例子中,阿拉伯语地区的一周的开始是周六,周末是周五、周六两天,至少一天出现在该月/该年的星期可作为该月/该年的第一个星期。
arabicEgyptLocale.weekInfo
// {firstDay: 6, weekend: [5, 6], minimalDays: 1}
2. Intl 枚举属性支持的类型
v9.9 也同时新增了 Intl.supportedValuesOf(code)
以返回数组,包含 V8 当前支持的类型。code
参数支持传入calendar
, collation
, currency
,numberingSystem
, timeZone
, unit
。
Intl.supportedValuesOf('calendar')
// ['buddhist', 'chinese', 'coptic', 'dangi', ...]
Intl.supportedValuesOf('collation')
// ['big5han', 'compat', 'dict', 'emoji', ...]
Intl.supportedValuesOf('currency')
// ['ADP', 'AED', 'AFA', 'AFN', 'ALK', 'ALL', 'AMD', ...]
Intl.supportedValuesOf('numberingSystem')
// ['adlm', 'ahom', 'arab', 'arabext', 'bali', ...]
Intl.supportedValuesOf('timeZone')
// ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', ...]
Intl.supportedValuesOf('unit')
// ['acre', 'bit', 'byte', 'celsius', 'centimeter', ...]