是否有rubys的JavaScript等价物#{};序列?
在JavaScript中构建字符串是否有比字符串浓缩更好的方法 如果我可以像ruby那样扩展字符串中的变量,而不是执行大量的“foo”+bar+“baz”,那么我的代码会更干净。如果处理大量字符串,然后使用数组,在数组中推送字符串部分,并在末尾连接它们(以空字符串作为分隔符)似乎是跨平台最高效的是否有rubys的JavaScript等价物#{};序列?,javascript,ruby,Javascript,Ruby,在JavaScript中构建字符串是否有比字符串浓缩更好的方法 如果我可以像ruby那样扩展字符串中的变量,而不是执行大量的“foo”+bar+“baz”,那么我的代码会更干净。如果处理大量字符串,然后使用数组,在数组中推送字符串部分,并在末尾连接它们(以空字符串作为分隔符)似乎是跨平台最高效的 String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, func
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"));
将产生:
“福吧巴兹”
“是否存在rubys“{}”
序列的JavaScript等价物?”
关于一个等价物,没有。JavaScript本机没有字符串插值。尽管您可以使用函数在某种程度上复制它。提供了一个纯JavaScript解决方案:
您还可以使用CoffeScript,这是一种编译为JavaScript的语言 会给你想要的东西
您还可以研究一下,这是一种很好的语言,可以编译成JavaScript,并具有字符串插值等(可能太多)功能。对不起,伙计们,所有这些都不是ruby的方式,这里有一个基本的p等价物,抱歉,这肯定可以做得更好。。 如果只需要连接,只需在第一个解决方案中替换document.write by return
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
函数p(str){
write(str.replace(/#{(\w)}/g,函数(match,s){return eval(s)})+“
”;
}
String.prototype.p=函数(){
返回这个。replace(/{(\w)}/g,function(match,s){return eval(s)})+“
”;
};
var f=“foo”,b=“bar”
p(“{f}{b}”)
document.write(“#{f}{b}”.p());
=>福巴
=>福巴
编辑:我添加了一个原型版本,这一版本有一些困难,它被称为语法糖
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
第一种方法速度更快,阅读效果更好
此处测试的性能:理想情况下,这将取代
{…}
,以避免损坏可能包含花括号的字符串。例如,一个JavaScript代码片段。没问题,没关系,这只是搜索{number}而不是别的。
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
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 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)