javascript中的任何类似于ruby的#{value}(字符串插值)

min*_*eow 18 javascript ruby

我厌倦了这样写:

string_needed ="prefix ....."+ topic +"suffix ...."+ name +"testing";

我想现在有人可能已经做了一些事情;)

erj*_*ang 18

对不起:(

我喜欢利用Array.join:

string_needed = `prefix.....${topic}suffix....${name}testing`
Run Code Online (Sandbox Code Playgroud)

或使用 ${}

["prefix ....", topic, "suffix....", name, "testing"].join("")
Run Code Online (Sandbox Code Playgroud)

或者你可以编写自己的连接函数:

String.concat("a", 2, "c")
Run Code Online (Sandbox Code Playgroud)

或使用第三方String.concat功能,例如http://www.diveintojavascript.com/projects/javascript-sprintf

  • @Reid我可以建议吗?http://blogs.sitepoint.com/2010/09/14/javascript-fast-string-concatenation/;) (2认同)

Pan*_*ood 10

你可以考虑使用coffeescript来编写代码(它有像Ruby这样的插值,即#{foo}).

它"编译"到javascript - 所以你最终会得到像你所写的一样的javascript,但不需要编写/维护+++代码你厌倦了

我意识到要求你考虑另一种语言是否是一个有效答案的边缘,但考虑到coffeescript的工作方式,你的一个标签是Ruby,我希望它会通过.


erj*_*ang 7

作为一个Javascript的好奇心,你可以实现一些基本上类似Ruby的插值:

sub = function(str) {
  return str.replace(/#\{(.*?)\}/g,
    function(whole, expr) {
      return eval(expr)
    })
}

js> y = "world!"
world!
js> sub("Hello #{y}")
Hello world!
js> sub("1 + 1 = #{1 + 1}")
1 + 1 = 2
Run Code Online (Sandbox Code Playgroud)

在除了字符串文字之外的任何东西上使用它都会遇到麻烦,反正它可能很慢(尽管我还没有测量过).我想我会告诉你的.