Intl.NumberFormat.prototype.formatToParts()

基线 广泛可用

此功能已经很成熟,并且在许多设备和浏览器版本中都能正常工作。它在浏览器中可用,自 2017 年 9 月.

formatToParts() 方法的 Intl.NumberFormat 实例允许对由此 Intl.NumberFormat 对象生成的字符串进行区域感知格式化。

试一试

语法

js
formatToParts()
formatToParts(number)

参数

number 可选

一个 NumberBigInt 用于格式化。

返回值

一个 Array 包含以部分格式化的数字的对象。

描述

formatToParts() 方法对于数字字符串的自定义格式化很有用。它返回一个 Array 包含区域特定的标记的对象,您可以通过这些标记构建自定义字符串,同时保留区域特定的部分。该 formatToParts() 方法返回的结构如下

js
[
  { type: "integer", value: "3" },
  { type: "group", value: "." },
  { type: "integer", value: "500" },
];

可能的类型如下

compact

指数以 "long""short" 形式显示,具体取决于 compactDisplay(默认情况下为 short)在 notation 设置为 compact 时如何指定。

currency

货币字符串,例如符号 "$" 和 "€" 或名称 "Dollar"、"Euro",具体取决于 currencyDisplay 如何指定。

decimal

小数分隔符字符串 ("。")。

exponentInteger

指数整数值,当 notation 设置为 scientificengineering 时。

exponentMinusSign

指数减号字符串 ("-")。

exponentSeparator

指数分隔符,当 notation 设置为 scientificengineering 时。

fraction

分数。

group

组分隔符字符串 (",")。

infinity

Infinity 字符串 ("∞")。

integer

整数。

literal

格式化数字中的任何文字字符串或空格。

minusSign

减号字符串 ("-")。

nan

NaN 字符串 ("NaN")。

plusSign

加号字符串 ("+")。

percentSign

百分号字符串 ("%")。

unit

单位字符串,例如 "l" 或 "litres",具体取决于 unitDisplay 如何指定。

unknown

unknown 类型结果的字符串。

示例

比较格式和 formatToParts

NumberFormat 输出本地化的、不透明的字符串,无法直接操作

js
const number = 3500;

const formatter = new Intl.NumberFormat("de-DE", {
  style: "currency",
  currency: "EUR",
});

formatter.format(number);
// "3.500,00 €"

但是,在许多用户界面中,人们希望自定义此字符串的格式。该 formatToParts 方法通过以部分形式提供字符串,从而实现对由 NumberFormat 格式化程序生成的字符串进行区域感知格式化

js
formatter.formatToParts(number);

// return value:
[
  { type: "integer", value: "3" },
  { type: "group", value: "." },
  { type: "integer", value: "500" },
  { type: "decimal", value: "," },
  { type: "fraction", value: "00" },
  { type: "literal", value: " " },
  { type: "currency", value: "€" },
];

现在,信息可以单独获取,并且可以以自定义的方式重新格式化和连接。例如,使用 Array.prototype.map()箭头函数switch 语句模板字面量Array.prototype.reduce().

js
const numberString = formatter
  .formatToParts(number)
  .map(({ type, value }) => {
    switch (type) {
      case "currency":
        return `<strong>${value}</strong>`;
      default:
        return value;
    }
  })
  .reduce((string, part) => string + part);

这将使货币变为粗体,当使用 formatToParts() 方法。

js
console.log(numberString);
// "3.500,00 <strong>€</strong>"

规范

规范
ECMAScript 国际化 API 规范
# sec-intl.numberformat.prototype.formattoparts

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅