在 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
