Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有rubys的JavaScript等价物#{};序列?_Javascript_Ruby - Fatal编程技术网

是否有rubys的JavaScript等价物#{};序列?

是否有rubys的JavaScript等价物#{};序列?,javascript,ruby,Javascript,Ruby,在JavaScript中构建字符串是否有比字符串浓缩更好的方法 如果我可以像ruby那样扩展字符串中的变量,而不是执行大量的“foo”+bar+“baz”,那么我的代码会更干净。如果处理大量字符串,然后使用数组,在数组中推送字符串部分,并在末尾连接它们(以空字符串作为分隔符)似乎是跨平台最高效的 String.prototype.format = function() { var args = arguments; return this.replace(/{(\d+)}/g, func

在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"));
将产生:

“福吧巴兹”

“是否存在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)