覆盖 Number.toLocaleString("fa-IR") 并更改波斯数字的千位分隔符

Override Number.toLocaleString("fa-IR") and change its thousands separator character for Persian numbers

我需要根据区域设置格式重新格式化数值,为此我使用了 Number.toLocaleString("LOCAL") 函数。在伊朗,大多数人更喜欢使用 , 作为千位分隔符,但 Number.toLocaleString("fa-IR") 使用 ٬(技术上是正确的)。

尽管您可以使用以下代码替换字符,但是有什么方法可以覆盖 Number.toLocaleString("fa-IR") 的功能吗?

function formatNumber(number) {
  let string = number.toLocaleString('fa-IR'); // ۱۲٬۳۴۵٫۶۷۹
  number = number.replace(/\٬/g, ",‬");
  return string;
}
    
formatNumber(12345.6789); // the result: ۱۲,۳۴۵٫۶۷۹

PS:我知道那里有很多类似的代码片段,但我想覆盖内置函数(如果可能的话)。

如果您愿意更改 Number 的原型,那么可以。经常警告不要更改内置 class 的原型,因为这可能会与其他库等混淆。

砥砺前行:

const old = Number.prototype.toLocaleString;
Number.prototype.toLocaleString = function(locale)
{
  let result = old.call(this, locale);
  if(locale === 'fa-IR')
  {
    result = result.replace(/\٬/g, ",‬");
  }
  return result;
}