Number.prototype.toLocaleString()

基线 广泛可用

此功能已得到很好的确立,并且可在许多设备和浏览器版本上运行。它自以下时间起在所有浏览器中都可用 2017 年 9 月.

toLocaleString() 方法是 Number 值的一个方法,它返回一个字符串,其中包含此数字的特定于语言的表示形式。在支持 Intl.NumberFormat API 的实现中,此方法只需调用 Intl.NumberFormat

每次调用 toLocaleString 时,它都必须在一个大型的本地化字符串数据库中执行搜索,这可能会降低效率。当使用相同的参数多次调用该方法时,最好创建一个 Intl.NumberFormat 对象并使用其 format() 方法,因为 NumberFormat 对象会记住传递给它的参数,并可能决定缓存数据库的一部分,以便将来调用 format 时可以在更受约束的上下文中搜索本地化字符串。

试一试

语法

js
toLocaleString()
toLocaleString(locales)
toLocaleString(locales, options)

参数

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

在支持 Intl.NumberFormat API 的实现中,这些参数与 Intl.NumberFormat() 构造函数的参数完全对应。不支持 Intl.NumberFormat 的实现被要求忽略这两个参数,使使用的区域设置和返回的字符串形式完全依赖于实现。

locales 可选

一个包含 BCP 47 语言标记的字符串,或一个包含此类字符串的数组。对应于 Intl.NumberFormat() 构造函数的 locales 参数。

在不支持 Intl.NumberFormat 的实现中,此参数将被忽略,通常会使用主机的区域设置。

options 可选

一个调整输出格式的对象。对应于 Intl.NumberFormat() 构造函数的 options 参数。

在不支持 Intl.NumberFormat 的实现中,此参数将被忽略。

有关这些参数以及如何使用它们的详细信息,请参阅 Intl.NumberFormat() 构造函数

返回值

根据特定于语言的约定表示给定数字的字符串。

在支持 Intl.NumberFormat 的实现中,这等效于 new Intl.NumberFormat(locales, options).format(number)

注意:大多数情况下,toLocaleString() 返回的格式是一致的。但是,输出可能因实现而异,即使在同一区域设置内也是如此——输出变化是设计使然,并且规范允许。它也可能不是你期望的。例如,字符串可能使用不换行空格或被双向控制字符包围。你不应该将 toLocaleString() 的结果与硬编码常量进行比较。

示例

使用 toLocaleString()

此方法的基本用法,不指定 locale,将在默认区域设置并使用默认选项返回格式化的字符串。

js
const number = 3500;

console.log(number.toLocaleString()); // "3,500" if in U.S. English locale

检查对 locales 和 options 参数的支持

localesoptions 参数可能并非所有实现都支持,因为对国际化 API 的支持是可选的,并且某些系统可能没有必要的数据。对于没有国际化支持的实现,toLocaleString() 始终使用系统的区域设置,这可能不是你想要的。因为任何支持 localesoptions 参数的实现都必须支持 Intl API,所以你可以检查后者的存在情况以了解支持情况

js
function toLocaleStringSupportsLocales() {
  return (
    typeof Intl === "object" &&
    !!Intl &&
    typeof Intl.NumberFormat === "function"
  );
}

使用 locales

此示例显示了本地化数字格式的一些变化。为了获取应用程序用户界面中使用的语言的格式,请确保使用 locales 参数指定该语言(以及可能的一些备用语言)

js
const number = 123456.789;

// German uses comma as decimal separator and period for thousands
console.log(number.toLocaleString("de-DE"));
// 123.456,789

// Arabic in most Arabic speaking countries uses Eastern Arabic digits
console.log(number.toLocaleString("ar-EG"));
// ١٢٣٤٥٦٫٧٨٩

// India uses thousands/lakh/crore separators
console.log(number.toLocaleString("en-IN"));
// 1,23,456.789

// the nu extension key requests a numbering system, e.g. Chinese decimal
console.log(number.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(number.toLocaleString(["ban", "id"]));
// 123.456,789

使用 options

可以使用 options 参数自定义 toLocaleString() 提供的结果

js
const number = 123456.789;

// request a currency format
console.log(
  number.toLocaleString("de-DE", { style: "currency", currency: "EUR" }),
);
// 123.456,79 €

// the Japanese yen doesn't use a minor unit
console.log(
  number.toLocaleString("ja-JP", { style: "currency", currency: "JPY" }),
);
// ¥123,457

// limit to three significant digits
console.log(number.toLocaleString("en-IN", { maximumSignificantDigits: 3 }));
// 1,23,000

// Use the host default language with options for number formatting
const num = 30000.65;
console.log(
  num.toLocaleString(undefined, {
    minimumFractionDigits: 2,
    maximumFractionDigits: 2,
  }),
);
// "30,000.65" where English is the default language, or
// "30.000,65" where German is the default language, or
// "30 000,65" where French is the default language

规范

规范
ECMAScript 语言规范
# sec-number.prototype.tolocalestring
ECMAScript 国际化 API 规范
# sup-number.prototype.tolocalestring

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅