为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?
Posted
技术标签:
【中文标题】为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?【英文标题】:Why doesn't Intl.NumberFormat work with units in Safari and Firefox?为什么 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位? 【发布时间】:2020-06-19 08:36:52 【问题描述】:我正在尝试使用here 给出的关于格式化数字的示例。
console.log((16).toLocaleString('en-GB',
style: "unit",
unit: "liter",
unitDisplay: "long"
));
我在 chrome 中尝试过,效果很好。但是,在 Safari 和 Firefox 中,我分别收到以下错误 Error: style must be either "decimal", "percent", or "currency"
和 Error: invalid value "unit" for option style
。
在查看浏览器兼容性后,我从文档中认为它应该适用于所有浏览器。我试图寻找答案,但我找不到关于这个问题的任何信息。有谁知道这是为什么,或者我可以在哪里找到更多信息?
【问题讨论】:
javascript解释器代表数百万行代码,如果您发现错误,您可以打开错误票通知他们 我明白了。我只是想知道这是一个错误还是它毕竟不受支持。找不到任何相关信息。 如果相同的 js 代码在 2 个不同的解释器上给出 2 个不同的结果,则很有可能这是一个解释器错误。 很遗憾,我们已经放弃了列出所有未知错误的清单,可能是因为太多了! 【参考方案1】:问题来自style
字段的值unit
。
根据ECMA-402, 6th edition, June 2019 ECMAScript® 2019 Internationalization API Specification:
该字段的值必须是一条记录,它的名称必须具有“十进制”、“百分比”和“货币”三种数字格式样式的名称。
根据Draft ECMA-402 / February 27, 2020 ECMAScript® 2020 Internationalization API Specification:
该字段的值必须是一个Record,它的字段名称必须是“十进制”、“百分比”、“货币”、和“单位”这四种数字格式样式 .
Firefox 和 Safari 正在实施 ECMA-402 规范的第 6 版,而 Chrome 正在实施同一规范的草案版本。规范草案可以随时更改,并且没有正式保证这个新的unit
值将包含在第 7 版中。如果你想跨浏览器兼容和面向未来,你应该坚持使用第 6 版并等待第 7 版的发布,然后再使用这些新功能。
如果您想了解详细信息,可以阅读proposition for this new feature。
【讨论】:
感谢您清理它。我认为 MDN 应该在他们的文档中澄清这一点,因为在查看浏览器兼容性部分时,它有点误导。 The proposal 已于 2020 年 3 月 23 日更新为以下状态:“此提案已合并到 ECMA-402 中,并计划用于 2020 年版规范。” See here 了解此功能当前的浏览器兼容性。以上是关于为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?的主要内容,如果未能解决你的问题,请参考以下文章
Intl.NumberFormat#format 最大整数值
如何将 Intl.NumberFormat 与本机反应一起使用?