BigInt.prototype.toLocaleString()
基线 广泛可用
此功能已经成熟,并在许多设备和浏览器版本上都能正常运行。它自 2017 年 9 月.
报告反馈
toLocaleString()
方法是 BigInt
值的一种方法,它返回一个字符串,其中包含此 BigInt 的语言敏感表示形式。在支持 Intl.NumberFormat
API 的实现中,此方法简单地调用 Intl.NumberFormat
。
试一试
语法
每次调用
toLocaleString
时,它都必须在一个大型本地化字符串数据库中执行搜索,这在效率上可能低下。当该方法用相同的参数多次调用时,最好创建一个 Intl.NumberFormat
对象并使用它的 format()
方法,因为 NumberFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,这样未来的 format
调用可以在更受限的上下文中搜索本地化字符串。toLocaleString()
toLocaleString(locales)
toLocaleString(locales, options)
js
参数
locales
和 options
参数自定义了函数的行为,并允许应用程序指定应使用其格式化约定的语言。
- 在支持
Intl.NumberFormat
API 的实现中,这些参数完全对应于Intl.NumberFormat()
构造函数的参数。不支持Intl.NumberFormat
的实现被要求忽略这两个参数,使使用的语言环境和返回的字符串形式完全依赖于实现。 -
locales
可选带有 BCP 47 语言标签的字符串,或此类字符串的数组。对应于
Intl.NumberFormat()
构造函数的locales
参数。 - 在不支持
Intl.NumberFormat
的实现中,此参数被忽略,通常使用主机语言环境。 -
options
可选调整输出格式的对象。对应于
Intl.NumberFormat()
构造函数的options
参数。
在不支持 Intl.NumberFormat
的实现中,此参数被忽略。
有关这些参数的详细信息以及如何使用它们,请参阅 Intl.NumberFormat()
构造函数。
返回值
根据语言特定的约定表示给定 BigInt 的字符串。
在支持 Intl.NumberFormat
的实现中,这等效于 new Intl.NumberFormat(locales, options).format(number)
。
示例
注意: 大多数情况下,toLocaleString()
返回的格式是一致的。但是,即使在同一语言环境中,输出也可能在不同的实现之间有所不同——输出变化是设计使然,并且由规范允许。它也可能不是你所期望的。例如,该字符串可能使用不间断空格,或者被双向控制字符包围。你不应该将 toLocaleString()
的结果与硬编码常量进行比较。
使用 toLocaleString()
每次调用
toLocaleString
时,它都必须在一个大型本地化字符串数据库中执行搜索,这在效率上可能低下。当该方法用相同的参数多次调用时,最好创建一个 Intl.NumberFormat
对象并使用它的 format()
方法,因为 NumberFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,这样未来的 format
调用可以在更受限的上下文中搜索本地化字符串。const bigint = 3500n;
console.log(bigint.toLocaleString());
// "3,500" if in U.S. English locale
该方法的基本用法,不指定 locale
,会以默认语言环境和默认选项返回一个格式化的字符串。
检查对语言环境和选项参数的支持
每次调用
toLocaleString
时,它都必须在一个大型本地化字符串数据库中执行搜索,这在效率上可能低下。当该方法用相同的参数多次调用时,最好创建一个 Intl.NumberFormat
对象并使用它的 format()
方法,因为 NumberFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,这样未来的 format
调用可以在更受限的上下文中搜索本地化字符串。function toLocaleStringSupportsLocales() {
return (
typeof Intl === "object" &&
!!Intl &&
typeof Intl.NumberFormat === "function"
);
}
locales
和 options
参数可能并非在所有实现中都受支持,因为对国际化 API 的支持是可选的,并且某些系统可能没有必要的数据。对于不支持国际化的实现,toLocaleString()
始终使用系统的语言环境,这可能不是你想要的。由于任何支持 locales
和 options
参数的实现都必须支持 Intl
API,因此你可以检查后者的存在性来判断是否支持。
使用语言环境
每次调用
toLocaleString
时,它都必须在一个大型本地化字符串数据库中执行搜索,这在效率上可能低下。当该方法用相同的参数多次调用时,最好创建一个 Intl.NumberFormat
对象并使用它的 format()
方法,因为 NumberFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,这样未来的 format
调用可以在更受限的上下文中搜索本地化字符串。const bigint = 123456789123456789n;
// German uses period for thousands
console.log(bigint.toLocaleString("de-DE"));
// 123.456.789.123.456.789
// Arabic in most Arabic speaking countries uses Eastern Arabic digits
console.log(bigint.toLocaleString("ar-EG"));
// ١٢٣٬٤٥٦٬٧٨٩٬١٢٣٬٤٥٦٬٧٨٩
// India uses thousands/lakh/crore separators
console.log(bigint.toLocaleString("en-IN"));
// 1,23,45,67,89,12,34,56,789
// the nu extension key requests a numbering system, e.g. Chinese decimal
console.log(bigint.toLocaleString("zh-Hans-CN-u-nu-hanidec"));
// 一二三,四五六,七八九,一二三,四五六,七八九
// when requesting a language that may not be supported, such as
// Balinese, include a fallback language, in this case Indonesian
console.log(bigint.toLocaleString(["ban", "id"]));
// 123.456.789.123.456.789
此示例展示了本地化数字格式的一些变化。为了获得应用程序用户界面中使用的语言的格式,请确保使用 locales
参数指定该语言(以及可能的一些备用语言)
使用选项
每次调用
toLocaleString
时,它都必须在一个大型本地化字符串数据库中执行搜索,这在效率上可能低下。当该方法用相同的参数多次调用时,最好创建一个 Intl.NumberFormat
对象并使用它的 format()
方法,因为 NumberFormat
对象会记住传递给它的参数,并可能决定缓存数据库的一部分,这样未来的 format
调用可以在更受限的上下文中搜索本地化字符串。const bigint = 123456789123456789n;
// request a currency format
console.log(
bigint.toLocaleString("de-DE", { style: "currency", currency: "EUR" }),
);
// 123.456.789.123.456.789,00 €
// the Japanese yen doesn't use a minor unit
console.log(
bigint.toLocaleString("ja-JP", { style: "currency", currency: "JPY" }),
);
// ¥123,456,789,123,456,789
// limit to three significant digits
console.log(bigint.toLocaleString("en-IN", { maximumSignificantDigits: 3 }));
// 1,23,00,00,00,00,00,00,000
规范
可以使用 options 参数自定义 toLocaleString() 提供的结果 |
---|
规范 # ECMAScript 国际化 API 规范 |
浏览器兼容性
sup-bigint.prototype.tolocalestring