JavaScript 相当于 printf/String.Format

2022-08-29 21:50:59

我正在寻找一个好的JavaScript等同于C / PHP或C#/ Java程序员,(用于.NET)。printf()String.Format()IFormatProvider

我的基本要求是目前数字的千位分隔符格式,但是处理大量组合(包括日期)的东西会很好。

我意识到微软的Ajax库提供了一个版本,但我们不希望该框架的全部开销。String.Format()


答案 1

当前的 JavaScript

从 ES6 开始,您可以使用模板字符串:

let soMany = 10;
console.log(`This is ${soMany} times easier!`);
// "This is 10 times easier!

有关详细信息,请参阅下面的Kim的答案


较旧的答案

尝试 sprintf() for JavaScript


如果你真的想自己做一个简单的格式方法,不要连续做替换,而是同时做。

因为提到的大多数其他建议在先前替换的替换字符串也包含如下格式序列时失败:

"{0}{1}".format("{1}", "{0}")

通常,您会期望输出为,但实际输出为 。因此,请同时进行替换,而不是像fearphage的建议一样。{1}{0}{1}{1}


答案 2

基于先前建议的解决方案:

// First, checks if it isn't implemented yet.
if (!String.prototype.format) {
  String.prototype.format = function() {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    });
  };
}

"{0} is dead, but {1} is alive! {0} {2}".format("ASP", "ASP.NET")

输出

ASP已经死了,但 ASP.NET 还活着!销售{2}


如果您不想修改 的原型:String

if (!String.format) {
  String.format = function(format) {
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined'
        ? args[number] 
        : match
      ;
    });
  };
}

为您提供更熟悉的:

String.format('{0} is dead, but {1} is alive! {0} {2}', 'ASP', 'ASP.NET');

具有相同的结果:

ASP已经死了,但 ASP.NET 还活着!销售{2}