#ECMAScript 2021(ES12)中新增的 Intl.NumberFormat.formatToParts() 方法详解
介绍
ES2021 新增了一个 Intl.NumberFormat.formatToParts()
方法,该方法返回一个包含被格式化数字的数字组成部分的数组,包括整数、小数、符号等。这个新特性非常有用,因为可以在编写前端数值处理时,更加灵活地对数值进行处理。
在传统的国际化中,我们经常将数字格式化为字符串。这种方式虽然可用,但是并不奏效。因为我们无法轻松地执行与这些数字相关的操作(例如比较、排序等)。这个新特性正好解决了这个问题。
语法
Intl.NumberFormat.formatToParts(number);
- number: 要进行格式化的数字。
该方法基于 Intl.NumberFormat
对象,因此需要首先创建一个 Intl.NumberFormat
实例。
格式化数字不同部分
formatToParts()
方法返回一个数组,其中包含输入数字的不同部分。每个数组元素是一个对象,这些对象可能具有以下属性:
- type:表示该部分的类型(例如,整数部分、小数点、负号等)。
- value:表示该部分的实际值。
可以根据需要对每个部分进行处理。
以下是一个简单的示例:
let formatter = new Intl.NumberFormat("en-US"); let parts = formatter.formatToParts(1234.56); console.log(parts);
输出结果:
[ { type: 'integer', value: '1' }, { type: 'integer', value: '234' }, { type: 'decimal', value: '.' }, { type: 'fraction', value: '56' } ]
该代码段中,我们创建一个 Intl.NumberFormat
实例,用它来格式化 1234.56,然后使用 formatToParts()
方法获取格式化数字的不同部分。
更高级的示例
让我们看一个更高级的示例,Illustrating the use of formatToParts() method with Indian numbers:
-- -------------------- ---- ------- --- ------ - --- ----------------------------------------- --- ----- - ------------- --- ----- - ---------------------------- --- --------- - --- --- ---- ---- -- ------ - ------ ----------- - ---- ---------- --------- -- ---------- - - -- ------ ---- ---------- --------- -- ---- ------ ---- ----------- --------- -- ----------- ------ ---- ------------ --------- -- ---- ------ -------- --------- -- ----------- - - -----------------------
输出结果:
12,34,56,789.99
在该示例中,我们使用了在印度使用的全宽数字格式。使用 formatToParts()
方法获得印度数字的不同部分,并使用 switch
语句对不同部分进行处理,以最终格式化数字。
总结
ES2021 中的 Intl.NumberFormat.formatToParts()
方法提供了更灵活和可控的格式化数字的方式。通过访问不同部分,可以更好地对数字进行处理。此外,这种方法对于国际化的数字处理非常有用,可以为不同地区的数字提供定制的格式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6518fa8495b1f8cacd13d030