在前端开发中,我们时常需要对数字进行格式化以符合我们的需求。ES12 中新增了一个 Number.format
方法来方便地处理数字格式化,本文将介绍如何使用这个方法以及其与其他数字格式化方法的比较。
语法和用法
Number.format
方法的语法如下:
numObj.format([locales[, options]])
其中,numObj
表示要格式化的数字,locales
和 options
是可选参数,分别用于指定本地化参数和格式化选项。
为了更好地理解 Number.format
的用法,下面举一个简单的例子:
const num = 123456.789; console.log(num.format()); // "123,456.789" console.log(num.format('de-DE')); // "123.456,789" console.log(num.format('zh-Hans-CN-u-nu-hanidec')); // "一二三,四五六.七八九"
从上面的例子可以看出,使用 Number.format
可以轻松实现数字的本地化格式化。如果不传入任何参数,则默认采用当前环境的本地化设置。
除了基础的数字格式化之外,Number.format
还支持许多高级的格式化选项。例如,通过指定 { style: 'currency', currency: 'USD' }
参数,就可以将数字格式化为美元货币形式。
const num = 123456.789; console.log(num.format('en-US', { style: 'currency', currency: 'USD' })); // "$123,456.79"
值得注意的是,Number.format
方法只能用于数字类型的数据。如果该方法被非数字类型的数据调用,会抛出 TypeError
异常。
与其他数字格式化方法的比较
在 ES12 之前,许多前端开发者使用第三方库或手写代码来实现数字格式化。下面我们将对比 Number.format
方法与一些常见的数字格式化方法之间的差异。
toLocaleString
ES5 中,Number
类型的原型上提供了一个 toLocaleString
方法,可以用于本地化数字的格式化。这个方法的语法和用法如下:
numObj.toLocaleString([locales[, options]])
从语法上看,toLocaleString
和 Number.format
的参数形式非常相似。但实际上它们之间有一些细微的差别。最明显的区别是,toLocaleString
方法不支持任意格式化选项,只能通过传入 locales
参数来进行本地化格式化。
与此相比,Number.format
则支持更加全面和灵活的格式化操作。例如,在 Number.format
中,我们可以设置小数点位数、使用分位号等。
Intl.NumberFormat
除了 Number.format
之外,ES6 还提供了 Intl.NumberFormat
构造函数。它也是用于数字本地化格式化的工具,语法如下:
new Intl.NumberFormat([locales[, options]])
从语法上看,Intl.NumberFormat
使用起来更加冗长,需要使用 new
关键字来创建实例。但这个构造函数还支持更加灵活的选项设置,例如:可以设置小数点位数、显示分数形式等。
与 Number.format
相比,Intl.NumberFormat
更像一个完整的工具库,提供了丰富的 API 以满足开发者的各种数字格式化需求。
总结
在本文中,我们介绍了 ES12 中新增的 Number.format
方法,并探讨了它和其他数字格式化方法(包括 toLocaleString
和 Intl.NumberFormat
)之间的不同。通过使用 Number.format
可
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6501cebf95b1f8cacdf6bca1