有没有比使用字符串连接更好的方法在JavaScript中构建字符串?
如果我可以做一些类似ruby的东西,你可以在字符串中扩展变量,而不是做很多“foo”+ bar +“baz”,这会使我的代码更清晰。
答案 0 :(得分:7)
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"));
将产生:
“foo bar baz”
答案 1 :(得分:1)
Chris Nielsen在this answer中提供了纯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的语言。 It supports string interpolation:
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
答案 2 :(得分:1)
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
编辑:我添加了一个原型版本,在那个版本上遇到了一些困难
答案 3 :(得分:0)
var myStr = [];
myStr.push('something')
console.log(myStr.join(""))
答案 4 :(得分:0)
如果您处理 lot 字符串,那么使用一个数组,其中push
字符串部分,最后join
它们(空字符串作为分隔符)似乎是跨平台最有效的。
答案 5 :(得分:0)
“是否存在类似于rubys
“#{}”
序列的JavaScript?”
关于等效,没有。 JavaScript本身没有字符串插值。虽然您可以使用函数在某种程度上复制它。
答案 6 :(得分:0)
pylover's answer会为您提供喜欢的内容。
您也可以查看CoffeeScript,这是一种很好的语言,可以编译为JavaScript并具有字符串插值,以及其他(可能太多许多)功能。
答案 7 :(得分:0)
它被称为语法糖。
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)
VS
var text = "Add" + " " + a*b + " " + "elements" + " " + c + ".";
console.log(text)
// "Add 8 elements together." (511,188,184 op/sec 0.73% slower)
第一种方法更快更好阅读。
此处的效果测试:JSPerf string test