JavaScript: 如何使用 format 格式化字符串


在 Java 等編程語言中有 String.format 方法用來組裝字符串,非常方便。

而 JavaScript 中好像只能是通過加號組裝:

var s = "Hello " + " World"

有類似 String.format 的函數嗎?有,但要自己實現。

方式1:使用ES6

在最新的 Chrome 等瀏覽器中已經支持 ES6 了。

var name = 'letian'
var s = `Hello ${name}`
console.log(s)

方法2:在 String 原型中增加 format 函數

String.prototype.format = function() {
    var formatted = this;
    for( var arg in arguments ) {
        formatted = formatted.replace("{" + arg + "}", arguments[arg]);
    }
    return formatted;
};

var s = '你好 {0} {1}'.formar('value1', 123)
console.log(s)

運行結果:

你好 value1 123

但是上面這個實現有 bug,比如 '{0} {1}'.format('{1}', '{0}') 的結果是 {0} {1},這個和預期的 {1} {0} 不一致。

修復如下:

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
      ;
    });
  };
}

如果不想在字符串后面加.format,可以用 String.format 方法,那么可以用下面的實現:

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}', 'Hello')。

方法3: sprintf.js 庫

見 https://github.com/alexei/sprintf.js 。

參考

 

原文:https://www.letianbiji.com/web-front-end/js-string-format.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM