由於晶片短缺 任天堂Switch產量將低於目標20%
阿新 • • 發佈:2021-11-03
在 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。