有没有比字符串连接更好的方法在 JavaScript 中构建字符串?
如果我可以做一些像 ruby 这样的事情,你可以在字符串中扩展变量而不是做很多“foo”+bar+“baz”,它会让我的代码更干净。
有没有比字符串连接更好的方法在 JavaScript 中构建字符串?
如果我可以做一些像 ruby 这样的事情,你可以在字符串中扩展变量而不是做很多“foo”+bar+“baz”,它会让我的代码更干净。
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
console.log("{0} bar {1}.".format("foo","baz"));
将产生:
“富吧巴兹”
Chris Nielsen在这个答案中提供了一个纯 JavaScript 解决方案:
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));
您还可以使用 CoffeScript,它是一种编译为 JavaScript 的语言。它支持字符串插值:
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
对不起,伙计们,但这一切都不是很红宝石的方式,这是一个基本的 p 等价物,对不起 eval,这肯定可以做得更好..如果你只是想要连接,只需在第一个 return 替换 document.write解决方案
function p(str){
document.write(str.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>");
}
String.prototype.p = function() {
return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>";
};
var f="foo", b="bar"
p("#{f} #{b}")
document.write("#{f} #{b}".p());
=> foo bar
=> foo bar
编辑:我添加了一个原型版本,对此有一些困难
var myStr = [];
myStr.push('something')
console.log(myStr.join(""))
如果您处理大量字符串,那么使用一个数组,其中push
包含字符串部分并在末尾join
(以空字符串作为分隔符)似乎是跨平台最有效的。
pylover 的回答会给你一些你想要的东西。
您可能还会研究CoffeeScript,它是一种很好的语言,可以编译为 JavaScript 并具有字符串插值以及其他(可能太多)功能。
它被称为语法糖。
var a = 2;
var b = 4;
var c = "together";
var text = `Add ${a*b} elements ${c}.`;
console.log(text)
// "Add 8 elements together." (515,988,604 op/sec)
对比
var text = "Add" + " " + a*b + " " + "elements" + " " + c + ".";
console.log(text)
// "Add 8 elements together." (511,188,184 op/sec 0.73% slower)
第一种方法更快更好阅读。
此处测试的性能:JSPerf 字符串测试