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这五个属性会返回一个数组,包含该区域标识支持的日历类型、词语定序类型、时钟类型、编号系统类型、时区类型。

  1. const arabicEgyptLocale = new Intl.Locale('ar-EG')
  2. // ar-EG
  3. arabicEgyptLocale.calendars
  4. // ['gregory', 'coptic', 'islamic', 'islamic-civil', 'islamic-tbla']
  5. arabicEgyptLocale.collations
  6. // ['compat', 'emoji', 'eor']
  7. arabicEgyptLocale.hourCycles
  8. // ['h12']
  9. arabicEgyptLocale.numberingSystems
  10. // ['arab']
  11. arabicEgyptLocale.timeZones
  12. // ['Africa/Cairo']

textInfo属性会返回包含区域文字相关信息的对象,目前文字信息只有一个属性 direction, 即表示文字的排版方向,ltr是从左到右,rtl 是从右到左。

  1. arabicEgyptLocale.textInfo
  2. // { direction: 'rtl' }
  3. japaneseLocale.textInfo
  4. // { direction: 'ltr' }
  5. chineseTaiwanLocale.textInfo
  6. // { direction: 'ltr' }

weekInfo 属性会返回当地区域星期相关信息的对象,目前有属性 firstDay 表示一周的开始是周几,1-7 表示周一到周日;weekend 属性返回一个数组,表示周末是哪几天;minimalDays 属性表示每月/每年的第一个星期最少要求的天数。
以下例子中,阿拉伯语地区的一周的开始是周六,周末是周五、周六两天,至少一天出现在该月/该年的星期可作为该月/该年的第一个星期。

  1. arabicEgyptLocale.weekInfo
  2. // {firstDay: 6, weekend: [5, 6], minimalDays: 1}

2. Intl 枚举属性支持的类型

v9.9 也同时新增了 Intl.supportedValuesOf(code) 以返回数组,包含 V8 当前支持的类型。code 参数支持传入calendar, collation, currency,numberingSystem, timeZone, unit

  1. Intl.supportedValuesOf('calendar')
  2. // ['buddhist', 'chinese', 'coptic', 'dangi', ...]
  3. Intl.supportedValuesOf('collation')
  4. // ['big5han', 'compat', 'dict', 'emoji', ...]
  5. Intl.supportedValuesOf('currency')
  6. // ['ADP', 'AED', 'AFA', 'AFN', 'ALK', 'ALL', 'AMD', ...]
  7. Intl.supportedValuesOf('numberingSystem')
  8. // ['adlm', 'ahom', 'arab', 'arabext', 'bali', ...]
  9. Intl.supportedValuesOf('timeZone')
  10. // ['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', ...]
  11. Intl.supportedValuesOf('unit')
  12. // ['acre', 'bit', 'byte', 'celsius', 'centimeter', ...]