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

参数

localesoptions 参数自定义了函数的行为,并允许应用程序指定应使用其格式化约定的语言。

在支持 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"
  );
}

localesoptions 参数可能并非在所有实现中都受支持,因为对国际化 API 的支持是可选的,并且某些系统可能没有必要的数据。对于不支持国际化的实现,toLocaleString() 始终使用系统的语言环境,这可能不是你想要的。由于任何支持 localesoptions 参数的实现都必须支持 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

另请参阅